由於JavaScript語言設計者Brendan Eich所處的時代(1994年)面向對象編程興盛,他也受到了影響,JavaScript裏面的所有數據類型都是對象,但是他想要的是一個簡易的腳本語言不想使其複雜化,因而他沒有引入“類”,設計了“繼承”機制來將所有對象聯繫起來。
JavaScript中沒有“子類”和“父類”的概念,也沒有“類”(class)和“實例”(instance)的區分,全靠一種很奇特的“原型鏈”(prototype chain)模式來實現繼承。
function DOG(name){ this.name = name; } DOG.prototype = { species:'犬科'}; var dogA = new DOG('大毛'); var dogB = new DOG('二毛'); alert(dogA.species); alert(dogB.species);
顯示結果爲:
犬科
犬科
由於所有的實例對象共享同一個prototype對象,那麼從外界看起來,prototype對象就好像是實例對象的原型,而實例對象則好像"繼承"了prototype對象一樣。這就是Javascript繼承機制的設計思想。
摘自:http://www.ruanyifeng.com/blog/2011/06/designing_ideas_of_inheritance_mechanism_in_javascript.html