关于js继承
繼承在js中占有非常重要的地位,那么在js中有很多中繼承的方式,不過每一種繼承方式都有優缺點。下面就列舉幾種繼承的方式。
實現繼承首先需要一個父類,在js中實際上是沒有類的概念,在es6中class雖然很像類,但實際上只是es5上語法糖而已
一、原型鏈繼承
實現:
? ? ? ? 將父類的實例掛載到子類的原型上
?
?優點:
? ? ? ? 實例可繼承的屬性有:實例的構造函數的屬性,父類構造函數屬性,父類原型的屬性
?缺點:
? ? ? ? ? ?1、新實例無法向父類構造函數傳參。
2、繼承單一。
3、所有新實例都會共享父類實例的屬性。
二、 構造函數繼承
用.call()和.apply()將父類構造函數引入子類函數(在子類函數中做了父類函數的自執行(復制))
?
?優點:1、只繼承了父類構造函數的屬性,沒有繼承父類原型的屬性。
?2、解決了原型鏈繼承缺點1、2、3。
? 3、可以繼承多個構造函數屬性(call多個)。
?4、在子實例中可向父實例傳參。
缺點:1、只能繼承父類構造函數的屬性。
?2、無法實現構造函數的復用。(每次用每次都要重新調用)
?3、每個新實例都有父類構造函數的副本,臃腫。
三、 組合式繼承
?優點:1、可以繼承父類原型上的屬性,可以傳參,可復用。
? 2、每個新實例引入的構造函數屬性是私有的。
缺點:調用了兩次父類構造函數(耗內存),子類的構造函數會代替 ? ?原型上的那個父類構造函數
?
四、class繼承
?
?es6繼承?class定義類,?extends繼承類,? super()表示?類
?
子類可以沒有自己的構造方法,沒有可以調用父親的,但是有構造方法先調用父親
?
總結
- 上一篇: Simditor富文本编辑器
- 下一篇: 基于bat的自动网络重连配置脚本