2013-12-16 39 views
2

我寫了下面的代碼片段:原型對象是原爲String

Object.prototype.getAllKeyValuePair=function(){ 
    var str=""; 
    for(var p in this){ 
     str=str+"{"+p+", "+this[p]+"}"; 
    } 
    return str; 
} 
alert(Object.getOwnPropertyDescriptor(String.prototype.getAllKeyValuePair)); 

我是例外是String.prototype.getAllKeyValuePair因爲undefined我沒有設置String原型明確​​。請解釋爲什麼當wy定義一個Object原型時,它會自動定義一個String原型?

+3

在JavaScript中,(幾乎)* everything * extends'Object'。 –

+0

String.prototype是一個對象,它爲什麼不從Object.prototype繼承? – dandavis

回答

3

String.prototype對象從Object.prototype對象「繼承」。

在Firefox,Chrome或Safari瀏覽器,試試這個:

alert(String.prototype.__proto__ === Object.prototype) 

這應該提醒true

在MDN處退房Inheritance and the prototype chain

1

這是因爲JavaScript中幾乎所有類型都是從對象繼承而來的,並且在通過原型擴展對象類型時,每個從它繼承的對象也都可以訪問您定義的函數。