4

私は小さなjavascriptライブラリを書いています:Itemオブジェクトを定義し、関数を追加しItem.prototype.addNumber、最後に列挙できないように設定しましたが、for...inループを使用してItemのメソッドをログに記録しようとすると、関数は引き続き表示されます。これは私のコードです、私は何か間違ったことをしていますか?(Chrome18およびFirefox11でテスト済み)

function Item() {
    ...
}

Item.prototype.addString= function() {
    ...
}

Object.defineProperty(Item, "addString", { enumerable: false });
4

2 に答える 2

5

Itemonではなくonでプロパティを定義していますItem.prototype

Object.defineProperty(Item.prototype, "addString", { enumerable: false });

最初にに追加Object.definePropertyしていた場合は、プロパティ記述子を同時に明示的に(または暗黙的に)設定できます...addStringItem.prototype

これにより、とが暗黙的に設定されenumerable:falseます。falseconfigurablewritable

Object.defineProperty(Item.prototype, "addString", { 
    value: function() {
        ...
    }
});

または、あなたがなりたいだけならenumerablefalseあなたはこれを行うことができます...

Object.defineProperty(Item.prototype, "addString", { 
    value: function() {
        ...
    },
    configurable: true,
    writable: true
//  ,enumerable: false  // uncomment to be explicit, though not necessary
});
于 2012-04-20T13:37:07.900 に答える
1

プロパティ(addString)を(列挙不可能なもの)に直接定義しObject、別のaddString(デフォルトで列挙可能)Itemのプロトタイプに定義します。

プロトタイプチェーンのfor ( in )プロパティを繰り返し処理するため、そこに表示されます。

于 2012-04-20T13:37:23.653 に答える