【发布时间】:2014-02-28 01:24:51
【问题描述】:
我正在尝试使用 setter 在对象原型上设置可枚举属性。
function Foo(){}
Object.defineProperty(Foo.prototype, 'tag', {
enumerable: true, configurable: true,
set: function(x){
if(typeof(x) == "string") {
Object.defineProperty(this, 'tag', {value: x});
}
}
});
var bar = new Foo();
bar.tag = 7; console.log(bar.tag); // undefined
bar.tag = "baz"; console.log(bar.tag); // "baz"
console.log(bar); // {}
console.log(bar.propertyIsEnumerable('tag')); // false
一切都按预期工作,除了最后两行。
我刚刚测试了节点 v0.10.25 中的代码。我不明白为什么属性标签不可枚举。
作为一种解决方法,我在构造函数中针对this 使用Object.defineProperty 而不是Foo.prototype,但我想了解为什么javascript 中的对象不能从可枚举的属性继承。
【问题讨论】:
标签: javascript node.js