2014-10-27 51 views
-1

的原型如果我创建一个这样的数组...如何枚举阵列

var arr = [1,2,3]; 

...变量“ARR”将有不同的原型样“的toString”和“的forEach”。我如何枚举所有“arr”原型的名称并获得像“concat”,“constructor”,“entries”,“every”等列表?

+0

只是为了澄清:'toString' *不是*“原型”,它是一个合适的该对象称为Array.prototype。 – yerforkferchips 2014-11-04 19:20:32

回答

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); 
 
    } 
 
}

+0

非常感谢。 – eeejay 2014-10-28 15:09:28

+0

欢迎您;) – 2014-10-28 19:33:55

0

绝对最好方法做你所要求的是使用以下4行代码。

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

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

+1

[MDN](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Object/proto)说:“警告:__proto__属性已被弃用,不应使用“。也许你应该使用['Object.getPrototypeOf()'](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Object/getPrototypeOf) – jfriend00 2014-10-27 22:38:14

+0

恕我直言,如果你使用一个字像“最好”一样,你应该明确你用来做出主观判断的健康标准。 – Phrogz 2014-10-28 02:46:09

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 
*/