sparky

Object构造函数的方法 之 Object.seal

依然范特西╮ 提交于 2020-08-12 08:39:56
Object.seal(obj) 封闭一个对象 obj 将要被密封的对象。 返回值 被密封的对象。 描述 通常,一个对象是可扩展的(可以添加新的属性)。密封一个对象会让这个对象变的不能添加新属性,且所有已有的属性 会变得不可配置。属性不可配置的效果就是不可删除,以及一个数据属性不能被重新定义成为访问器属性。但属性的值仍然可以被修改, 尝试删除一个密封对象的属性或者将某个密封对象的属性从数据属性转换为访问器属性。都会静默失败或者抛出 TypeError. 不会影响从原型链上继承的属性。但是__proto__属性得值也会不能修改。 示例 var obj = { prop: function () {}, foo: 'bar' } // 可以添加新属性。 // 可以删除和更改属性 obj.foo = 'baz' obj.lumpy = 'woof'; delete obj.prop; var o = Object.seal(obj) o === obj // true Object.isSealed(obj) // true // 仍然可以修改密封对象的属性值 obj.foo = 'quux' // 但是不能将属性从新定义为访问器属性。 // 反之亦然 Object.defineProperty(obj, 'foo', { get: function () { return 'a' }