2011-06-05 28 views
2

嘗試做如下:捕捉本土原型的內容

for (var key in String.prototype) 
    console.log(key); 

它給你...什麼都沒有但是,你仍然有String.prototype.split例如(當然,除非你自己定義一些外國的東西。)。我在其他所有本地對象(NumberArray,Object)上嘗試過,結果相同。雖然沒有Array.isArray例如

for (var key in Array) 
    console.log(key); 

下也 「不工作」。

Object.keys(Array.prototype)給出了一個空數組,Object.keys(Array)也是如此。然而,Object.keys(jQuery)例如提供了一個巨大的陣列,正如所料。

那麼,爲什麼我們不能遍歷瀏覽器提供的本機,但仍然可以訪問它們?

回答

3

MDC page for for..in

for...in循環不遍歷內置屬性

的原因是,在Javascript屬性或者是可枚舉或不可枚舉; 「enumerable」表示您可以訪問for..in循環中的屬性。所有內置屬性都是不可枚舉的。

現代瀏覽器都支持Object.getOwnPropertyNames方法:

console.log(Object.getOwnPropertyNames(Array.prototype)); 
// ["length", "constructor", "concat", "map", "sort", "join", "indexOf", "filter", "some", "toString", "reduceRight", "splice", "forEach", "shift", "unshift", "toLocaleString", "lastIndexOf", "reverse", "reduce", "pop", "push", "every", "slice"]