JavaScript 物体密封
示例
Object.seal防止添加或删除对象的属性。一旦对象被密封,其属性描述符就不能转换为另一种类型。Object.freeze与之不同的是,它允许编辑属性。
尝试在密封的对象上执行此操作的操作将失败,并且将失败
var obj = { foo: 'foo', bar: function () { return 'bar'; } }; Object.seal(obj) obj.newFoo = 'newFoo'; obj.bar = function () { return 'foo' }; obj.newFoo; //未定义 obj.bar(); //'foo' //无法将foo用作访问器属性 Object.defineProperty(obj, 'foo', { get: function () { return 'newFoo'; } }); //TypeError //但您可以将其设为只读 Object.defineProperty(obj, 'foo', { writable: false }); //TypeError obj.foo = 'newFoo'; obj.foo; //'foo';
在严格模式下,这些操作将引发TypeError
(function () { 'use strict'; var obj = { foo: 'foo' }; Object.seal(obj); obj.newFoo= 'newFoo'; //TypeError }());