簡體   English   中英

為什么通過Object.defineProperty添加的屬性在Javascript中不可迭代

[英]Why properties added via Object.defineProperty are not iterable in Javascript

考慮以下代碼:

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循環中不可見?

你必須將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

因為此行為可能適用於添加元屬性。 可以通過設置enumerable屬性來更改行為。 https://developer.mozilla.org/en/JavaScript/Reference/Global_Objects/Object/defineProperty

對象屬性的“元屬性”的布爾字段都默認為false ,包括enumerable屬性。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM