JS對象(2)- 常見的繼承方式

本文歸納js中常見的幾種繼承方式。通過如下的對象作為示例的父對象:

1. 原型鏈繼承??

????子類的原型指向父類的實例來實現繼承:

? ? ? 優(yōu)點:

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

? ? ? ? 2. 簡單,容易實現

? ? ? 缺點:

? ? ? ? 1. 子類實例對象構建時,無法向父類構造函數傳參;

? ? ? ? 2. 只能繼承一個父類;

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

2. 借用構造函數

? ? 通過call或apply方法,調用父類構造函數實現繼承:

? ? 優(yōu)點:

? ? ? ? 1. 允許向父類構造函數傳遞參數,繼承父類的屬性;

? ? ? ? 2. 可以通過調用多個父類對象實現一次繼承多個父類對象;

? ? 缺點:

? ? ? ? 1. 只能繼承父類的實例屬性,無法繼承原型屬性;

? ? ? ? 2. 每個子類的實例對象都需要調用一次父類對象方法達到繼承效果,影響性能;

3. 組合繼承(組合原型鏈繼承和復用構造函數繼承)

? ? 該方式組合以上兩種方式,實現繼承:

? ? 優(yōu)點:

? ? ? ? 1. 繼承時運行想父類構造函數傳參;

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

? ? 缺點:調用了2次父類構造函數,對性能有影響

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

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

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

? ? 缺點:修改子類對象的原型,父類對象的原型也會跟著修改

5. 圣杯模式

? ? 該模式通過一個繼承函數,實現繼承:

? ? 優(yōu)點:

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

? ? ? ? 2. 修改子類對象的原型對象不會影響到父類對象的原型

? ? 缺點:無;

以上列舉了常見的幾種繼承方式,可能還有一些方式,不過都是相應的變形。

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

相關閱讀更多精彩內容

友情鏈接更多精彩內容