【发布时间】:2013-01-08 23:33:26
【问题描述】:
我想我在这里误解了一些东西。我有一个对象,其中包含我希望不可枚举的属性。我希望能够从对象的函数本身中为其赋值,但是当我这样做时,该属性变为可枚举的。
例子:
function ObjectNode() {
}
Object.defineProperty(ObjectNode.prototype, "parent", {
value:null
// enumerable and configurable default to false
}
// Pass an ObjectNode instance and set this object node as its parent
ObjectNode.prototype.addChild = function(node) {
node.parent = this; // <-- node.parent is now enumerable
...more code...
};
实际发生的情况是,为 node.parent 分配一个值会创建一个名为 parent 的新“自己”属性,它会覆盖原来的属性。
有没有一种方法可以在不这样做的情况下在内部为不可枚举的属性赋值?还是我必须求助于在闭包中引用变量的 getter/setter 属性?
编辑:
GGG 回答这个问题值得称赞,因为正是他的建议让我得到了最终的答案。
我想要做的实际上是从“for(key in object)”语句中隐藏一个简单的属性。我能够这样做:
function ObjectNode() {
Object.defineProperty(this, "parent", {
value:null,
writable:true
});
}
我一开始对此犹豫不决的一个原因是错误地理解我不希望在每个实例中都重新创建该属性。但是,呃,这就是实例属性!!!
感谢 GGG,帮助我重新调整大脑!
【问题讨论】:
-
乍看之下,原型的属性似乎仍然是不可枚举的,但您已经用对象本身的可枚举属性遮蔽了它。
-
如果您使用有效的 JavaScript 代码示例会更清楚。
-
@alex,请参阅问题以获取代码示例;)
-
@GGG 例子本身 ObjectNode.prototype.addChild(node) { ... 充其量没有意义。
-
是的,他忘记输入
= function并关闭一组括号,但我认为意图很明确。
标签: javascript enumerable assign defineproperty