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';