Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/444.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 迭代所有属性,而不仅仅是可枚举属性_Javascript - Fatal编程技术网

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

Javascript 迭代所有属性,而不仅仅是可枚举属性,javascript,Javascript,此代码仅迭代对象的可枚举属性: for (variable in object) statement 以下代码迭代所有属性,而不仅仅是可枚举属性: function getAllPropertyNames(obj) { var result = []; while (obj) { Array.prototype.push.apply(result, Object.getOwnPropertyNames(obj)); obj = Object.g

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

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;
}
  • while(obj)循环何时中断

  • while
    块中的行如何将
    obj
    的自身属性名称添加到
    结果中

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

  • while
    块中的行如何将
    obj
    的自身属性名称添加到
    结果中

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

    1。当
    Object.getPrototypeOf(obj)
    返回
    null
    。2. <代码>Array.prototype.push.apply(result,Object.getOwnPropertyNames(obj))
    var tmp=Object.getOwnPropertyNames(obj)相同;结果.推送(tmp[0],tmp[1],…)
    。了解有关
    的更多信息。请从MDN:应用
    。另请参见为什么需要Object.getPrototypeOf(obj)?@chefcurry7以便OP也可以收集继承的属性。为了澄清Felix的评论(这应该是答案),Object.Prototype的
    [[Prototype]]
    为空(请参见),这是所有内置原型链的结尾。这并不能保证与主机对象一起工作,但是对于与当前标准一致的实现,它可能会工作。哦,我看到ECMAScript ed 6不再有主机对象,它是由非sequitur:对象定义的,该对象不具有所有对象都必须支持的一个或多个基本内部方法的默认行为。如果某个对象必须由所有对象支持,那么如何允许某些对象不支持它?也许应该这样写:“……所有内置对象”。