2014-10-27 56 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 
*/