如何通过对象的实例属性?

时间:2013-10-28 15:07:19

标签: javascript performance

在以下语句中,Object#hasOwnProperty()用于检查当前属性是否是对象实例的属性,而不是原型链的属性。这意味着永远不要处理这种情况,for循环将遍历原型链中包含的整个属性列表。

for (key in obj) 
  if (obj.hasOwnProperty(key)) {
    iterator.call(context, obj[key], key);
  }
}

我想知道是否有办法摆脱这种行为,遍历对象实例的属性列表?


正如通过标签所提到的,我主要是提出表现兴趣的问题。我正在制定这种精确度,因为一个回复建议使用Object#getOwnPropertyNames(),但我看到的所有基准似乎都证明for…in hasOwnPropertygetOwnPropertyNames相比getOwnPropertyNames非常不利}}。例如:jsperf.com/for-in-vs-object-getownpropertynamesjsperf.com/for-in-vs-getownpropertynames-and-foreach/5

1 个答案:

答案 0 :(得分:0)

Object.getOwnPropertyNames返回直接在给定对象上找到的所有属性(可枚举或不可枚举)的数组。

所以你可以用这样的东西替换for循环:

Object.getOwnPropertyNames( obj ).forEach( function( key ){
    iterator.call(context, obj[key], key);
});

http://jsfiddle.net/fL2gH/