如何枚举阵列
的原型如果我创建一个这样的数组...如何枚举阵列
var arr = [1,2,3];
...变量“ARR”将有不同的原型样“的toString”和“的forEach”。我如何枚举所有“arr”原型的名称并获得像“concat”,“constructor”,“entries”,“every”等列表?
这里是一个递归方法打印在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);
}
}
非常感谢。 – eeejay 2014-10-28 15:09:28
欢迎您;) – 2014-10-28 19:33:55
绝对最好方法做你所要求的是使用以下4行代码。
var forEach = Array.prototype.forEach;
forEach.call(Object.getOwnPropertyNames([].__proto__), function(val) {
console.log(val);
});
您也可以直接使用forEach,但我的终端只有80个字符长。
[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
恕我直言,如果你使用一个字像“最好”一样,你应该明确你用来做出主观判断的健康标准。 – Phrogz 2014-10-28 02:46:09
在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
*/
只是为了澄清:'toString' *不是*“原型”,它是一个合适的该对象称为Array.prototype。 – yerforkferchips 2014-11-04 19:20:32