Get to know MDN better
此页面由社区从英文翻译而来。了解更多并加入 MDN Web Docs 社区。
Object.seal() 静态方法密封一个对象。密封一个对象会阻止其扩展并且使得现有属性不可配置。密封对象有一组固定的属性:不能添加新属性、不能删除现有属性或更改其可枚举性和可配置性、不能重新分配其原型。只要现有属性的值是可写的,它们仍然可以更改。seal() 返回传入的同一对象。
要密封的对象。
被密封的对象。
密封一个对象等价于阻止其扩展,然后将现有的属性描述符更改为 configurable: false。这会使对象上的属性集固定。令对象的所有属性不可配置且可以防止它们从数据属性转换成访问器属性,反之亦然,但它不会防止数据属性的值被更改。尝试删除或者向密封对象添加属性,或者将数据属性和访问器属性互相转换,都将失败,可能会静默失败,也可能会抛出 TypeError(最常见的是在严格模式代码中,但不仅限于此)。
原型链保持不变。然而,由于扩展被阻止,[[Prototype]] 不能重新赋值。
不同于 Object.freeze() 的是,通过 Object.seal() 密封的对象可以更改其现有属性,只要它们是可写的。
在 ES5 中,如果该方法的参数不是一个对象(即基本类型),它将会抛出 TypeError。在 ES2015 中,非对象参数将按原样返回,不会有任何错误,因为根据定义,基本类型已经是不可变的。
| ECMAScript® 2027 Language Specification # sec-object.seal |
启用 JavaScript 以查看此浏览器兼容性表。