JavaScript 物体密封

示例

5

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
}());