JavaScript提供了三种方法,用来精确控制一个对象的读写状态,防止对象被改变。
- Object.preventExtensions:阻止为对象添加新的属性。
- Object.seal:阻止为对象添加新的属性,同时也无法删除旧属性。等价于把属性描述对象的configurable属性设为false。注意,该方法不影响修改某个属性的值。
- Object.freeze:阻止为一个对象添加新属性、删除旧属性、修改属性值。
同时提供3个对应的辅助检查函数,简单说明如下:
- Object.isExtensible:检查一个对象是否允许添加新的属性。
- Object.isSealed:检查一个对象是否使用了Object.seal方法。
- Object.isFrozen:检查一个对象是否使用了Object.freeze方法。
【示例】下面代码分别使用Object.preventExtensions、Object.seal和Object.freeze函数控制对象的状态,然后再使用Object.isExtensible、Object.isSealed和Object.isFrozen函数检测对象的状态。
var obj1 = {};
console.log( Object.isExtensible(obj1) ); //true
Object.preventExtensions(obj1);
console.log( Object.isExtensible(obj1) ); //false
var obj2 = {};
console.log( Object.isSealed(obj2) ); //true
Object.seal(obj2);
console.log( Object.isSealed(obj2) ); //false
var obj3 = {};
console.log( Object.isFrozen(obj3) ); //true
Object.freeze(obj3);
console.log( Object.isFrozen(obj3) ); //false