2012-04-17 22 views
5

私はこのオブジェクトを作成し、それがプロパティです:forループがJavascriptのプロパティで動作しないのはなぜですか?

var obj = {}; 

Object.defineProperty(obj, "value", { 
    value: true, 
    writable: false, 
    enumerable: true, 
    configurable: true 
}); 

var name = "John"; 

Object.defineProperty(obj, "name", { 
    get: function(){ return name; }, 
    set: function(value){ name = value; } 
}); 

だから、私は彼らのforループを呼び出す:私のチュートリアルに従って、以下の結果が得られるはずである

for (var prop in obj) { 
    console.log(prop); 
} 

value 
name 

代わりに、値が表示されます。なぜ名前が表示されないのですか?

+0

問題を解決した回答の1つを受け入れてください。これは、将来この問題に直面したときに他のユーザーを助ける.. :) –

答えて

6

enumerableのデフォルト値はdefinePropertyです。これはfalseです。列挙できないプロパティはfor…inループには表示されません。 (それはenumerableフラグの全体の点です)enumerable:trueを2番目の定義に追加すると、修正されます。

some docsを参照してください。

5

nameプロパティが列挙として定義されていないので、

Object.defineProperty(obj, "name", { 
    enumerable: true, 
    get: function(){ return name; }, 
    set: function(value){ name = value; } 
}); 

に名前の定義を設定し、それが表示されます。

関連する問題