考虑以下代码:
var a = {
get aa() {
return 'aa';
}
};
Object.defineProperty(
a,
'bb',
{
get: function() {
return 'bb';
}
}
);
for(p in a) {
sys.puts(p + ': ' + a[p]);
}
输出结果为:
aa: aa
然而,属性bb是完全可访问和工作的。
为什么'bb'在for..in循环中不可见?
答案 0 :(得分:2)
您必须将enumerable
设置为true
。
(您也可以尝试 getOwnPropertyNames()
,但我不确定如何跨浏览器。)
var a = {
get aa() {
return 'aa';
}
}, arr = [];
Object.defineProperty(
a,
'bb',
{
get: function() {
return 'bb';
},
enumerable: true
}
);
for(p in a) {
arr.push(p + ': ' + a[p]);
}
alert(arr.join("\n"));
答案 1 :(得分:1)
因为此行为可能适用于添加元属性。可以通过设置enumerable属性来更改行为。 https://developer.mozilla.org/en/JavaScript/Reference/Global_Objects/Object/defineProperty
答案 2 :(得分:0)
对象属性的“元属性”的布尔字段都默认为false
,包括enumerable
属性。