迭代所有属性,而不仅仅是可枚举的属性

时间:2015-08-19 04:57:18

标签: javascript

此代码仅迭代对象的可枚举属性:

for (variable in object)
      statement

以下代码迭代所有属性,而不仅仅是可枚举的属性:

function getAllPropertyNames(obj) {
  var result = [];
   while (obj) {
       Array.prototype.push.apply(result, Object.getOwnPropertyNames(obj));
       obj = Object.getPrototypeOf(obj);
   }
    return result;
}
  1. 循环while (obj)何时中断?

  2. while块中的行如何将obj的属性名称添加到result

1 个答案:

答案 0 :(得分:0)

  
      
  1. 循环while (obj)何时中断?
  2.   

当原型链getPrototypeOf中没有更多原型时,返回null。对于常规对象,当您尝试获取Object.prototype的原型时会发生这种情况。

  
      
  1. while块中的行如何将obj的属性名称添加到result
  2.   

Array.prototype.push.apply(result, array)array中的每个元素作为参数传递给result.push。这就像调用result.push(a[0], a[1], ...),其中aObject.getOwnPropertyNames(obj)