我创建了这个对象及其属性:
var obj = {};
Object.defineProperty( obj, "value", {
value: true,
writable: false,
enumerable: true,
configurable: true
});
var name = "John";
Object.defineProperty( obj, "name", {
get: function(){ return name; },
set: function(value){ name = value; }
});
然后我在它们上面调用for循环:
for ( var prop in obj ) {
console.log( prop );
}
根据我的教程,应该产生以下结果:
value
name
但它只显示价值。为什么姓名没有出现?
答案 0 :(得分:6)
enumerable
中defineProperty
的默认值为false
;不可枚举的属性不会显示在for…in
循环中。 (这是enumerable
标志的重点。)如果您同时将enumerable:true
添加到第二个定义中,它将会修复'它
请参阅some docs。
答案 1 :(得分:5)
由于name属性未定义为enumerable,因此请将名称定义设置为
Object.defineProperty( obj, "name", {
enumerable: true,
get: function(){ return name; },
set: function(value){ name = value; }
});
它会出现。