js中的類繼承模式類似 c++中的 基類和派生類的關系。這里我們嘗試通過這樣的一種方式來解釋js中的基於原型鏈的繼承機制。
派生類對象存儲了基類的數據成員
派生類的實例對象可以 訪問基類的屬性,方法
js中的內置對象Date、RegExp、Number、Function... 可以看做派生類、Object可以被看做 基類。
而特殊的是,javascript中Object這個基類,同時又是 Function這個派生類的 實例對象。
----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
javascript中使用function關鍵詞創建一個類,例如:function obj(){}
但是,對於obj這個類(或方法),它會同時有__proto__和prototype屬性。__proto__屬性決定它是Function類的一個實例,你就可以視它為一個普通的方法或者屬性,能夠使用apply、call..或者obj() 來調用它。;而prototype屬性決定它是一個構造函數(派生類)。而由於javascript中的任何構造函數都將會是Object的派生類,所以你可以使用toString。。等方法。
所以可以得到,如果我們將Object視作一個function Object(){} 構造函數,在其原型上擴展屬性a=1 Object.prototype.a = 1
那么,Object.a===1 是成立的,因為Object同時也是Function的實例對象