原型式繼承:其思想是借助原型亲善,可以基于已有的對(duì)象創(chuàng)建新的對(duì)象设易,同時(shí)還不用創(chuàng)建自定義類型逗柴。
可以看到在Object內(nèi)部,先創(chuàng)建了一個(gè)臨時(shí)性的構(gòu)造函數(shù)顿肺,然后將傳入的對(duì)象作為個(gè)構(gòu)造函數(shù)的原型戏溺,最后返回這個(gè)構(gòu)造函數(shù)的實(shí)例,實(shí)際上屠尊,Object對(duì)傳入的對(duì)象進(jìn)行了一次淺拷貝旷祸。看下下面的例子:
這種方式必須有一個(gè)對(duì)象作為另一個(gè)對(duì)象的基礎(chǔ)讼昆,如果有這么一個(gè)對(duì)象的話托享,可以傳遞給object函數(shù),然后根據(jù)具體需求對(duì)返回出來的對(duì)象加以修改。上面例子中的Person對(duì)象就是作為基礎(chǔ)的那個(gè)對(duì)象闰围,然后傳遞到了object中赃绊,然后返回出來了一個(gè)新的對(duì)象,這個(gè)新對(duì)象將Person作為原型羡榴。因?yàn)樵蜕系膶傩院头椒ǘ际枪蚕淼谋滩椋泻竺鎸?duì)原型上的friends的修改會(huì)影響其變化五辽。
寄生繼承:寄生繼承的思想是創(chuàng)建一個(gè)用于封裝繼承過程的函數(shù)庵芭,該函數(shù)在內(nèi)部以某種方式來增強(qiáng)對(duì)象程帕。
如上腮鞍,create接受一個(gè)參數(shù)靶累,也就是要作為新對(duì)象基礎(chǔ)的那個(gè)對(duì)象(original)膘怕,然后把這個(gè)對(duì)象傳給object外傅,返回的值給clone嗽仪,clone然后在給對(duì)象添加新的方法羊瘩,最后返回clone對(duì)象腐螟,這樣就繼承了object返回的對(duì)象。下面看下如何使用上面的方法:
之前我們說的通過原型鏈和構(gòu)造函數(shù)的組合繼承也有自己不足的地方困后,當(dāng)我們在子構(gòu)造函數(shù)中通過call來對(duì)父構(gòu)造函數(shù)進(jìn)行第一次的執(zhí)行的時(shí)候乐纸,會(huì)在子類新對(duì)象上創(chuàng)建新的實(shí)例屬性,第二次是將父類的實(shí)例對(duì)象賦值給子類的原型摇予,子類原型上又會(huì)得到同樣的屬性汽绢,那么實(shí)例上的屬性就會(huì)屏蔽掉原型上的屬性,口頭上說可能不太直觀侧戴,我們看下例子:
如上宁昭,可以看到之前的組合方式的一些不足的地方,那么我們可以利用寄生組合方式嘗試一下看看能否彌補(bǔ)這些不足之處酗宋。
寄生組合方式积仗,即借用構(gòu)造函數(shù)來繼承屬性,通過原型鏈的形式繼承方法蜕猫。主要思想就是不需要為了指定子類型的原型而去調(diào)用超類型的構(gòu)造函數(shù)寂曹,我們需要的無非是超類型的原型副本。
以上就寄生組合繼承回右,是不是感覺很奇妙隆圆,這中方式了結(jié)的其實(shí)并不是很多,有更詳細(xì)的說明希望大家可以一起分享~