【发布时间】:2016-05-23 09:15:44
【问题描述】:
我需要以下功能。我想冻结对象的现有属性,但允许添加新属性。出于某种原因,似乎没有 Object.freezeExisting() 功能,我认为实现它可能是值得的,可以选择冻结原型的现有属性。
我不知道该怎么做。这是一些入门代码,但这根本不可能。我不太关心性能,它只需要 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;
};
但我只需要对上述内容进行全面检查。我还需要一些关于如何沿着原型链走下去并在弄乱实际的 Object.prototype 之前以某种方式停止的信息。
【问题讨论】:
-
hasownproperty是我猜你要找的那个。 -
“冻结原型的现有属性”没有多大意义。如果您不阻止扩展,无论如何都可以将原型换成其他对象。而您仅冻结原型链的一部分的意图使这一点更加可疑。您可能需要考虑将继承的属性复制到对象本身,然后冻结它们。
标签: javascript node.js ecmascript-6