js繼承
js的繼承呢我了解的有6個,分別呢有:::
1,原型連繼承
他的特點 : 將父類的實例作為子類的原型
特點:
- 非常純粹的繼承關系,實例是子類的實例,也是父類的實例
- 父類新增原型方法/原型屬性,子類都能訪問到
- 簡單,易於實現
缺點:
- 要想為子類新增屬性和方法,必須要在
new Animal()
這樣的語句之后執行,不能放到構造器中 - 無法實現多繼承
- 來自原型對象的所有屬性被所有實例共享(來自原型對象的引用屬性是所有實例共享的)(詳細請看附錄代碼: 示例1)
- 創建子類實例時,無法向父類構造函數傳參
2,借用構造函數繼承
他的特點 :只繼承了父類構造函數的屬性,沒有繼承父類原型的屬性
解決了原型鏈的缺點
可繼承多喝構造函數屬性
在子實例中可向父實例中傳參
他的缺點::只能繼承父類構造函數的屬性
無法實現構造函數的復用
每個新實例都會有父類構造函數的副本
3,組合繼承
他的特點:::可以繼承父類原型上的屬性,可以傳參,可以復用
每個新實例引入的構造函數屬性都是私有的
缺點呢:::耗內存。。子類的構造函數
4,原型式繼承
特點呢:::類似於復制一個對象,用函數來包裝
缺點::所有的實例都會繼承原型上的屬性
無法實現復用
5,寄生式繼承
特點呢:::::沒有創建自定義類型,因為只是套了個殼子返回對像,這個函數順理成章就成了創建的新對象
缺點呢::::沒有用到原型,無法復用
6,寄生組合式繼承
特點:::
只調用了一次超類構造函數,效率更高。避免在 SuberType.prototype上面創建不必要的、多余的屬性,與其同時,原型鏈還能保持不變。
因此寄生組合繼承是引用類型最理性的繼承范式