ES9 中的 Object.seal() 和 Object.freeze() 方法详解

阅读时长 4 分钟读完

在 JavaScript 中,对象是一种非常常见的数据类型。在实际开发中,我们常常需要对对象进行限制,以保证对象的属性和方法不被意外修改或删除。ES9 中提供了两种方法,即 Object.seal() 和 Object.freeze(),用于实现对象的封闭和冻结。本文将详细介绍这两种方法的使用和注意事项。

Object.seal()

Object.seal() 方法用于封闭一个对象,即防止向该对象添加新属性或从中删除已有属性。已有属性的值仍然可以被修改。使用方法如下:

其中,obj 为要封闭的对象。

示例代码如下:

-- -------------------- ---- -------
----- --- - -
  ----- ------
  ---- --
--

-----------------

---------- - ------- -- -------

------ --------- -- ------

------- - --- -- -------

在上述示例代码中,我们首先定义了一个对象 obj,包含两个属性 name 和 age。然后使用 Object.seal() 方法封闭了该对象。尝试添加新属性 gender 和删除属性 name 都无效,但是修改属性 age 的值是有效的。

需要注意的是,Object.seal() 方法只能封闭对象的一级属性,即对象的属性值如果是对象,该对象的属性仍然可以被修改。示例如下:

-- -------------------- ---- -------
----- --- - -
  ----- ------
  ---- ---
  ----- -
    ------- -------
    -------- ---------
  -
--

-----------------

--------------- - --------- -- -------

-------------- - --------- -- -------

------ ----------------- -- ------

在上述示例代码中,我们定义了一个对象 obj,包含三个属性 name、age 和 info。其中,info 是一个对象,包含两个属性 gender 和 address。使用 Object.seal() 方法封闭了该对象。尝试修改 info 对象的属性 gender 的值是有效的,但是添加新属性 phone 和删除属性 address 都无效。

Object.freeze()

Object.freeze() 方法用于冻结一个对象,即防止向该对象添加新属性、从中删除已有属性或修改已有属性的值。使用方法如下:

其中,obj 为要冻结的对象。

示例代码如下:

-- -------------------- ---- -------
----- --- - -
  ----- ------
  ---- --
--

-------------------

---------- - ------- -- -------

------ --------- -- ------

------- - --- -- -------

在上述示例代码中,我们首先定义了一个对象 obj,包含两个属性 name 和 age。然后使用 Object.freeze() 方法冻结了该对象。尝试添加新属性 gender、删除属性 name 和修改属性 age 的值都无效。

需要注意的是,Object.freeze() 方法同样只能冻结对象的一级属性,即对象的属性值如果是对象,该对象的属性仍然可以被修改。示例如下:

-- -------------------- ---- -------
----- --- - -
  ----- ------
  ---- ---
  ----- -
    ------- -------
    -------- ---------
  -
--

-------------------

--------------- - --------- -- -------

-------------- - --------- -- -------

------ ----------------- -- ------

在上述示例代码中,我们定义了一个对象 obj,包含三个属性 name、age 和 info。其中,info 是一个对象,包含两个属性 gender 和 address。使用 Object.freeze() 方法冻结了该对象。尝试修改 info 对象的属性 gender 的值、添加新属性 phone 和删除属性 address 都无效。

总结

Object.seal() 和 Object.freeze() 方法都用于限制对象的属性和方法,其中 Object.seal() 方法只能封闭对象的一级属性,即对象的属性值如果是对象,该对象的属性仍然可以被修改;而 Object.freeze() 方法连一级属性的属性值都不能被修改。在实际开发中,我们应该根据需要选择合适的方法来限制对象的属性和方法,以保证代码的安全性和稳定性。

来源:JavaScript中文网 ,转载请注明来源 https://www.javascriptcn.com/post/66347137d3423812e41f3a4c

纠错
反馈