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 は完全にアクセス可能で機能しています。

for..inループで「bb」が表示されないのはなぜですか?

4

3 に答える 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で試してみてください

于 2010-10-18T00:31:16.580 に答える
1

この動作は、メタ プロパティを追加する場合に実用的である可能性があるためです。動作は、列挙可能なプロパティを設定することで変更できます。https://developer.mozilla.org/en/JavaScript/Reference/Global_Objects/Object/defineProperty

于 2010-10-18T00:26:25.463 に答える
0

オブジェクト プロパティの「メタ プロパティ」のブール型フィールドは、プロパティfalseを含め、すべてデフォルトで に設定されenumerableます。

于 2010-10-18T00:25:24.153 に答える