如果我创建这样的数组......
var arr = [1,2,3];
......变量" arr"将有各种原型,如" toString"和" forEach"。我怎么能枚举" arr"的所有原型的名称?并获得一个类似" concat","构造函数","条目","每个"等等?
答案 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个字符。