如何枚举数组的原型

时间:2014-10-27 22:26:41

标签: javascript arrays prototype

如果我创建这样的数组......

var arr = [1,2,3];

......变量" arr"将有各种原型,如" toString"和" forEach"。我怎么能枚举" arr"的所有原型的名称?并获得一个类似" concat","构造函数","条目","每个"等等?

3 个答案:

答案 0 :(得分:1)

这是一个递归方法来打印prototype chain中的所有属性,而不仅仅是在第一个原型中,就像在其他答案中一样:



var arr = [1, 2, 3];

printAllPrototypeProperties(arr);

function printAllPrototypeProperties(obj) {
  var proto = Object.getPrototypeOf(obj);

  if (proto != null) {
    var properties = Object.getOwnPropertyNames(proto);

    document.body.appendChild(document.createElement('pre')).innerHTML = (JSON.stringify(properties, undefined, 3));

    return printAllPrototypeProperties(proto);
  }
}




答案 1 :(得分:1)

适用于firefox:

Object.getOwnPropertyNames(Object.getPrototypeOf([]));
Object.getOwnPropertyNames(Array.prototype);  //same thing.
/*
result:
length,toSource,toString,toLocaleString,join,reverse,sort,push,pop,shift,unshift,splice,concat,slice,lastIndexOf,indexOf,forEach,map,reduce,reduceRight,filter,some,every,find,findIndex,copyWithin,fill,@@iterator,entries,keys,constructor
*/

答案 2 :(得分:0)

使用以下4行代码执行所要求的绝对最佳方式。

var forEach = Array.prototype.forEach;
forEach.call(Object.getOwnPropertyNames([].__proto__), function(val) {
  console.log(val);
});

您也可以直接使用forEach,但我的终端只有80个字符。