的原型如果我創建一個這樣的數組...如何枚舉陣列
var arr = [1,2,3];
...變量「ARR」將有不同的原型樣「的toString」和「的forEach」。我如何枚舉所有「arr」原型的名稱並獲得像「concat」,「constructor」,「entries」,「every」等列表?
的原型如果我創建一個這樣的數組...如何枚舉陣列
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