在下面的语句中,Object#hasOwnProperty()
用于检查当前属性是否是对象实例的属性,而不是来自原型链。这意味着不管这种情况,for
循环将遍历原型链中包含的整个属性列表。
for (key in obj)
if (obj.hasOwnProperty(key)) {
iterator.call(context, obj[key], key);
}
}
我想知道是否有办法摆脱这种行为并且只通过对象实例的属性列表?
正如通过标签所提到的,我主要是问性能兴趣的问题。我之所以如此精确,是因为一个响应建议使用Object#getOwnPropertyNames()
,但我看到的所有基准似乎都证明for…in
with hasOwnProperty
vsgetOwnPropertyNames
对getOwnPropertyNames
. 例如:jsperf.com/for-in-vs-object-getownpropertynames或jsperf.com/for-in-vs-getownpropertynames-and-foreach/5