8

defineProperty を使用して、属性が for...in サイクルに表示されないようにしようとしていますが、機能しません。このコードは正しいですか?

function Item() {
    this.enumerable = "enum";
    this.nonEnum = "noEnum";
}
Object.defineProperty(Item, "nonEnum", { enumerable: false });

var test = new Item();

for (var tmp in test){
    console.log(tmp);
}
4

1 に答える 1

18

Item名前の付いたプロパティがありませんnonEnumチェックしてください)。これは、というプロパティを持つオブジェクトを作成する(コンストラクター)関数ですnonEnum

したがって、これは機能します。

var test = new Item();
Object.defineProperty(test, "nonEnum", { enumerable: false });

この関数は次のように書くこともできます。

function Item() {
    this.enumerable = "enum";
    Object.defineProperty(this, "nonEnum", { 
        enumerable: false, 
        value: 'noEnum' 
    });
}

jsFiddleデモ

于 2012-04-22T16:21:14.477 に答える