Object.freeze
Version >= 五
Object.freeze
通过阻止添加新属性,删除现有属性以及修改现有属性的可枚举性,可配置性和可写性来使对象不可变。它还可以防止更改现有属性的值。但是,它不能递归地工作,这意味着子对象不会自动冻结并且可能会发生变化。
除非代码在严格模式下运行,否则冻结后的操作将无提示失败。如果代码处于严格模式,则会抛出 TypeError
。
var obj = {
foo: 'foo',
bar: [1, 2, 3],
baz: {
foo: 'nested-foo'
}
};
Object.freeze(obj);
// Cannot add new properties
obj.newProperty = true;
// Cannot modify existing values or their descriptors
obj.foo = 'not foo';
Object.defineProperty(obj, 'foo', {
writable: true
});
// Cannot delete existing properties
delete obj.foo;
// Nested objects are not frozen
obj.bar.push(4);
obj.baz.foo = 'new foo';