原型式繼承:其思想是借助原型,可以基于已有的對象創(chuàng)建新的對象,同時(shí)還不用創(chuàng)建自定義類型。
可以看到在Object內(nèi)部,先創(chuàng)建了一個臨時(shí)性的構(gòu)造函數(shù),然后將傳入的對象作為個構(gòu)造函數(shù)的原型,最后返回這個構(gòu)造函數(shù)的實(shí)例,實(shí)際上,Object對傳入的對象進(jìn)行了一次淺拷貝。看下下面的例子:
這種方式必須有一個對象作為另一個對象的基礎(chǔ),如果有這么一個對象的話,可以傳遞給object函數(shù),然后根據(jù)具體需求對返回出來的對象加以修改。上面例子中的Person對象就是作為基礎(chǔ)的那個對象,然后傳遞到了object中,然后返回出來了一個新的對象,這個新對象將Person作為原型。因?yàn)樵蜕系膶傩院头椒ǘ际枪蚕淼模泻竺鎸υ蜕系膄riends的修改會影響其變化。
寄生繼承:寄生繼承的思想是創(chuàng)建一個用于封裝繼承過程的函數(shù),該函數(shù)在內(nèi)部以某種方式來增強(qiáng)對象。
如上,create接受一個參數(shù),也就是要作為新對象基礎(chǔ)的那個對象(original),然后把這個對象傳給object,返回的值給clone,clone然后在給對象添加新的方法,最后返回clone對象,這樣就繼承了object返回的對象。下面看下如何使用上面的方法:
之前我們說的通過原型鏈和構(gòu)造函數(shù)的組合繼承也有自己不足的地方,當(dāng)我們在子構(gòu)造函數(shù)中通過call來對父構(gòu)造函數(shù)進(jìn)行第一次的執(zhí)行的時(shí)候,會在子類新對象上創(chuàng)建新的實(shí)例屬性,第二次是將父類的實(shí)例對象賦值給子類的原型,子類原型上又會得到同樣的屬性,那么實(shí)例上的屬性就會屏蔽掉原型上的屬性,口頭上說可能不太直觀,我們看下例子:
如上,可以看到之前的組合方式的一些不足的地方,那么我們可以利用寄生組合方式嘗試一下看看能否彌補(bǔ)這些不足之處。
寄生組合方式,即借用構(gòu)造函數(shù)來繼承屬性,通過原型鏈的形式繼承方法。主要思想就是不需要為了指定子類型的原型而去調(diào)用超類型的構(gòu)造函數(shù),我們需要的無非是超類型的原型副本。
以上就寄生組合繼承,是不是感覺很奇妙,這中方式了結(jié)的其實(shí)并不是很多,有更詳細(xì)的說明希望大家可以一起分享~