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

enumerableindefineProperty的默认值为false; 不可枚举的属性不会出现在for…in循环中。(这就是enumerable标志的全部意义。)如果你也添加enumerable:true到你的第二个定义中,它会“修复”它。

查看一些文档

于 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 回答