为什么我的for循环不能处理我的Javascript属性?

时间:2012-04-17 03:25:43

标签: javascript ecmascript-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

但它只显示价值。为什么姓名没有出现?

2 个答案:

答案 0 :(得分:6)

enumerabledefineProperty的默认值为false;不可枚举的属性不会显示在for…in循环中。 (这是enumerable标志的重点。)如果您同时将enumerable:true添加到第二个定义中,它将会修复'它

请参阅some docs

答案 1 :(得分:5)

由于name属性未定义为enumerable,因此请将名称定义设置为

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

它会出现。