JavaScript 中的 Object.seal() 方法

发布于 2022-08-17 23:50:17 字数 1979 浏览 242 评论 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技术交流群

发布评论

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

关于作者

装迷糊

暂无简介

文章
评论
26 人气
更多

推荐作者

微信用户

文章 0 评论 0

小情绪

文章 0 评论 0

ゞ记忆︶ㄣ

文章 0 评论 0

笨死的猪

文章 0 评论 0

彭明超

文章 0 评论 0

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