5

このオブジェクトとそのプロパティを作成しました:

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

しかし、代わりに値を表示するだけです。名前が表示されないのはなぜですか?

4

2 に答える 2

7

enumerableinのデフォルト値definePropertyfalseです。for…in列挙不可能なプロパティはループに表示されません。enumerable(それがフラグの要点です。) enumerable:true2番目の定義にも追加すると、それが「修正」されます。

いくつかのドキュメントを参照してください。

于 2012-04-17T03:29:48.477 に答える
5

name プロパティは列挙可能として定義されていないため、name 定義を

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

そして現れます。

于 2012-04-17T03:30:45.947 に答える