2012-04-20 6 views
4

私は少しのjavascriptライブラリを書いています:私はItemオブジェクトを定義してからItem.prototype.addNumberの関数を追加しました。そして最後に私はそれを列挙できないものとして設定しました。ログを取ろうとすると、for...inループを使用して関数が表示されます。 これは私のコードです。間違っていますか?あなたがItem.prototypeに代わりのItemのプロパティを定義しているjavascriptプロパティはまだfor ...によって見つかった

function Item() { 
    ... 
} 

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

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

答えて

5

(クローム18とFirefox 11でテスト)。

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

あなたはObject.definePropertyを使用した場合、最初は、あなたは可能性が明示的(または暗黙的に)、Item.prototypeaddStringを追加は同時にプロパティ記述子を設定し...

この意志暗黙的にenumerable:falseと同様にをconfigurablewritableと設定します。

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 
}); 
+0

デフォルトではfalseではありませんか?私の答えで見積もりを見てください。そして私はMDNの記事 '* .prototype'を全く見ていませんでした。 – gdoron

+0

@gdoron: 'Item.prototype.addString = func ...'はデフォルトで列挙可能ですので、 'Object.defineProperty'を使用して列挙可能な設定を行います。 'Item.prototype.addString'プロパティが' defineProperty'を使用して最初に*作成されていた場合、yes、それは列挙できませんでした。 –

+0

ohhhだから、代わりにこれを使うことができます: 'Object.defineProperty(Item.prototype、" addString "、{});' **?** – gdoron

1

あなたはObject(非可算1)と、別の上に直接施設(addString)を定義していますItemのプロトタイプのaddString(デフォルトで列挙可能)。

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

関連する問題