JavaScript 中的 Object.seal() 方法
这 Object.seal()
函数 可防止在 JavaScript 对象上添加、删除或重新配置属性。
const sealed = Object.seal({ answer: 42 });
sealed.answer = 43; // OK
// TypeError: Cannot delete property 'answer' of #<Object>
delete sealed.answer;
// TypeError: Cannot add property newProp, object is not extensible
sealed.newProp = 42;
// TypeError: Cannot redefine property: answer
Object.defineProperty(sealed, 'answer', { enumerable: false });
seal()
类似于 _ Object.freeze()
function ,有一个关键区别:您仍然可以写入密封对象上的现有属性,但不能写入冻结对象。
const sealed = Object.seal({ answer: 42 });
const frozen = Object.freeze({ answer: 42 });
sealed.answer = 43; // ok
// TypeError: Cannot assign to read only property 'answer' of object '#<Object>'
frozen.answer = 43;
喜欢 freeze()
,从密封对象中添加、删除或重新配置属性只会在 严格模式下 。
否则它会默默地失败。
seal()
功能也类似于 Object.preventExtensions()
功能 。 但是 preventExtensions()
函数只阻止向对象添加新属性,您仍然可以 delete
属性或重新配置现有属性。
何时使用 seal()
freeze()
函数更常用, seal()
功能在生产中很少见。 一种潜在的用例 seal()
是为了保护 global
Node.js 中的对象。
Object.seal(global);
global.newProp = 42; // TypeError
某些 npm 模块,例如 safe-buffer ,会有意修改现有的全局变量,但您可能需要确保没有其他 npm 模块无意中添加新的全局变量。 诚然密封 global
这在 Node.js 社区中并不常见,当然也不是既定的最佳实践,但请尝试一下——您可能会对结果感到惊讶。
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论