为什么通过Object.defineProperty添加的属性在Javascript中不可迭代

4

考虑以下代码:

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循环中不可见?
3个回答

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"));

使用jsFiddle试一试


1

0

对象属性的“元属性”的布尔字段默认为false,包括enumerable属性。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接