2012-04-11 23 views
1

kown for..inループは、プロパティがオブジェクトのプロトタイプチェーンの属性であるかどうかに関係なく、属性allを出力します。 と私たちはテストfor ... forループとプロトタイプチェーン

var o={}; 
for(var i in o){ 
    console.log(o[i]);// output none 
} 

に(この方法で作成された:{})オブジェクトをやらせるには、Objectから
ですが、我々は、コードを実行すると、(のtoStringのような)オブジェクトのプロトタイプチェーン方式ではありません出力された
Objectのプロトタイプチェーンのメソッド(toString)が出力されないのはなぜですか?

+2

何が問題なのですか? – joshuahealy

答えて

5

toStringenumerableではありません。

("toString" in {}) === true 
({}).propertyIsEnumerable("toString") === false 

あなたがそうのような独自の非可算のプロパティを作成することができます:それはデフォルトですので、あなたは、enumerable: falseを省略することができます

var object = {}; 

Object.defineProperty(object, "property", { enumerable: false, value: 5 }); 

技術を。


これはブランケット部15句でin the specを示している。全ての場合において

、この節で説明内蔵Functionオブジェクトのlengthプロパティは、属性{ [[Writable]]: false, [[Enumerable]]: false, [[Configurable]]: false }を有しています。 特に指定のない限り、この節で説明されているプロパティはすべて{ [[Writable]]: true, [[Enumerable]]: false, [[Configurable]]: true }です。