gpt4 book ai didi

javascript - 不允许更改现有属性的可扩展对象?

转载 作者:行者123 更新时间:2023-11-30 15:22:26 25 4
gpt4 key购买 nike

JavaScript 对象可以被密封,这可以防止添加新属性以及删除或重新配置现有属性,但属性仍然是可写的。它们也可以被卡住,这是密封的,而且所有属性都变得不可写。

明显缺少使现有属性为只读、不可移动、不可配置的能力,同时使对象可扩展。这将有助于防止意外践踏对象的属性,同时允许其他代码增加它的属性。

使用原生 JavaScript 创建此类对象的最佳或惯用方法是什么?

最佳答案

简单地遍历对象的属性并使每个属性都不可写和不可配置:

var obj = { "foo": 1, "bar": 3 };
Object.defineProperty(obj, "baz", { set: a=>a });

Object.getOwnPropertyNames(obj).forEach(function(name) {
var desc = Object.getOwnPropertyDescriptor(obj, name);
desc.configurable = false;

// make the property non-writable if it is not an accessor property
if(!desc.set && !desc.get) { desc.writable = false; }

Object.defineProperty(obj, name, desc);
});

请注意,这不会使 setget 方法定义的访问器属性“不可写”,因为可写性的概念不适用于访问器属性-- 存储到访问器属性中运行 setter 。

关于javascript - 不允许更改现有属性的可扩展对象?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/43504354/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com