gpt4 book ai didi

javascript - 实现 Object.seal、Object.freeze、Object.preventExtensions 的替代方案

转载 作者:太空宇宙 更新时间:2023-11-04 03:31:16 25 4
gpt4 key购买 nike

我需要以下功能。我想卡住对象的现有属性,但允许添加新属性。由于某种原因,似乎没有 Object.freezeExisting() 功能,我认为实现它可能是值得的,可以选择卡住原型(prototype)的现有属性。

我不知道该怎么做。这是一些入门代码,但这根本不正确。我不太关心性能,它只需 100% 工作即可。

Object.freezeExistingProps = function(obj, modifyProto){

Object.keys(obj).forEach(function(key){

const val = obj[key];

Object.defineProperty(obj, key , { //we simply overwrite existing prop
value: val,
writable: false, // important, I think
enumerable: true,
configurable: false
});


});

return obj;

};

但我只需要对上述内容进行健全性检查。我还需要一些关于如何沿着原型(prototype)链前进并在弄乱实际的 Object.prototype 之前以某种方式停止的信息。

最佳答案

您可以轻松实现setIntegrityLevel algorithm无需自己阻止扩展:

Object.freezeExisting = function(o) {
for (const key of Reflect.ownKeys(o)) {
const desc = Object.getOwnPropertyDescriptor(o, key);
if (!desc)
continue;
if ("value" in desc)
Object.defineProperty(o, key, {configurable: false, writable: false});
else
Object.defineProperty(o, key, {configurable: false});
}
return o;
};

关于javascript - 实现 Object.seal、Object.freeze、Object.preventExtensions 的替代方案,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/37387077/

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