JS對(duì)象(2)- 常見(jiàn)的繼承方式

本文歸納js中常見(jiàn)的幾種繼承方式。通過(guò)如下的對(duì)象作為示例的父對(duì)象:

1. 原型鏈繼承??

????子類的原型指向父類的實(shí)例來(lái)實(shí)現(xiàn)繼承:

? ? ? 優(yōu)點(diǎn):

? ? ? ? 1. 父類新增原型屬性或方法,子類可以訪問(wèn);

? ? ? ? 2. 簡(jiǎn)單,容易實(shí)現(xiàn)

? ? ? 缺點(diǎn):

? ? ? ? 1. 子類實(shí)例對(duì)象構(gòu)建時(shí),無(wú)法向父類構(gòu)造函數(shù)傳參;

? ? ? ? 2. 只能繼承一個(gè)父類;

? ? ? ? 3. 所有子類實(shí)例都會(huì)繼承的父類實(shí)例屬性,這些繼承往往是多余的。

2. 借用構(gòu)造函數(shù)

? ? 通過(guò)call或apply方法,調(diào)用父類構(gòu)造函數(shù)實(shí)現(xiàn)繼承:

? ? 優(yōu)點(diǎn):

? ? ? ? 1. 允許向父類構(gòu)造函數(shù)傳遞參數(shù),繼承父類的屬性;

? ? ? ? 2. 可以通過(guò)調(diào)用多個(gè)父類對(duì)象實(shí)現(xiàn)一次繼承多個(gè)父類對(duì)象;

? ? 缺點(diǎn):

? ? ? ? 1. 只能繼承父類的實(shí)例屬性,無(wú)法繼承原型屬性;

? ? ? ? 2. 每個(gè)子類的實(shí)例對(duì)象都需要調(diào)用一次父類對(duì)象方法達(dá)到繼承效果,影響性能;

3. 組合繼承(組合原型鏈繼承和復(fù)用構(gòu)造函數(shù)繼承)

? ? 該方式組合以上兩種方式,實(shí)現(xiàn)繼承:

? ? 優(yōu)點(diǎn):

? ? ? ? 1. 繼承時(shí)運(yùn)行想父類構(gòu)造函數(shù)傳參;

? ? ? ? 2. 能夠繼承父類對(duì)象原型的屬性;

? ? 缺點(diǎn):調(diào)用了2次父類構(gòu)造函數(shù),對(duì)性能有影響

4. 原型式繼承(共享原型)

? ? 該方式通過(guò)共享父類的原型實(shí)現(xiàn)繼承(該模式類似于通過(guò)Object.create()創(chuàng)建對(duì)象):

? ? 優(yōu)點(diǎn):只繼承父類對(duì)象的原型屬性,不繼承多余的父類對(duì)象屬性

? ? 缺點(diǎn):修改子類對(duì)象的原型,父類對(duì)象的原型也會(huì)跟著修改

5. 圣杯模式

? ? 該模式通過(guò)一個(gè)繼承函數(shù),實(shí)現(xiàn)繼承:

? ? 優(yōu)點(diǎn):

? ? ? ? 1. 完美的模式,只繼承父類對(duì)象的原型屬性,不繼承多余的父類對(duì)象實(shí)例屬性;

? ? ? ? 2. 修改子類對(duì)象的原型對(duì)象不會(huì)影響到父類對(duì)象的原型

? ? 缺點(diǎn):無(wú);

以上列舉了常見(jiàn)的幾種繼承方式,可能還有一些方式,不過(guò)都是相應(yīng)的變形。

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請(qǐng)結(jié)合常識(shí)與多方信息審慎甄別。
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡(jiǎn)書(shū)系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

友情鏈接更多精彩內(nèi)容