JavaScript 中的 Object.seal() 方法

发布于 2022-08-17 23:50:17 字数 1979 浏览 239 评论 0

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 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。
列表为空,暂无数据

关于作者

装迷糊

暂无简介

0 文章
0 评论
24 人气
更多

推荐作者

醉城メ夜风

文章 0 评论 0

远昼

文章 0 评论 0

平生欢

文章 0 评论 0

微凉

文章 0 评论 0

Honwey

文章 0 评论 0

qq_ikhFfg

文章 0 评论 0

    我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
    原文