有时候,我们需要禁止修改某些对象,以保证核心代码的安全性,这时可以采取以下方法:
一. 如果想要禁止修改对象的某条属性,可以使用Object.defineProperty()
方法将这条属性的特性改为writable: false
和configurable: false
,这样该属性就变成了一个常量(不可修改、删除或配置)。

上面这个例子使用Object.defineProperty()
方法使student
对象的"age"
属性变得不可修改、不可删除、不可配置(指无法再使用Object.defineProperty()
方法修改属性的特性)。
二. 如果想禁止给对象添加属性(禁止扩展),可以将这个对象传给Object.preventExtensions()
方法。

上面这个例子使用Object.preventExtensions()
方法使student
对象变得不可扩展,因此给student
新增hate
属性的操作不生效(虽然不会报错)。
要确定一个对象是否可扩展,可以把它传给Object.isExtensible()
。
三. 如果想禁止给对象添加属性且禁止配置或删除任何属性,可以使用Object.seal()
方法(这个方法会在内部调用Object.preventExtensions()
禁止对象扩展,并把其所有属性标记为configurable: false
)。

上面这个例子使用
方法密封了对象Object.seal()
student
,使之无法新增属性,也无法配置或删除任何属性。
可以使用Object.isSealed()
确定对象是否被封存。
四. 如果想禁止给对象添加属性且禁止配置、删除或修改任何属性,可以使用Object.freeze()
方法(这个方法会在内部调用Object.seal()
密封对象,并把其所有属性标记为writable: false
)。

上面这个例子使用
方法冻结了对象Object.freeze()
student
,使之无法新增属性,也无法配置、删除或修改任何属性。
可以使用Object.isFrozen()
方法确定对象是否被冻结。