web前端tips:js繼承——組合繼承

上篇文章給大家分享了 js繼承中的借用構造函數(shù)繼承
在借用構造函數(shù)繼承中,我提到了它的缺點
無法繼承父類原型鏈上的方法和屬性,只能繼承父類構造函數(shù)中的屬性和方法
父類的方法無法復用,每個子類實例都會創(chuàng)建一份方法的副本
有沒有方法解決這個缺點捏?
組合繼承
聽名字,即可明白肯定是多個繼承方法組合在一起實現(xiàn)js的繼承,突出各自優(yōu)點,互補各自缺點。
組合繼承是JavaScript中實現(xiàn)繼承的一種常見方式。它通過結合原型鏈和構造函數(shù)來實現(xiàn)繼承。
具體而言,組合繼承通過在子類構造函數(shù)中調(diào)用父類構造函數(shù),從而繼承父類的屬性,并且使用原型鏈繼承父類的方法。
以下是實現(xiàn)組合繼承的基本步驟:
創(chuàng)建父類構造函數(shù):定義一個父類構造函數(shù),用來初始化父類的屬性和方法
創(chuàng)建子類構造函數(shù):定義一個子類構造函數(shù),通過調(diào)用父類構造函數(shù)來繼承父類的屬性,并設置子類自己的屬性。
繼承父類的方法:將子類的原型對象設置為父類的實例,從而繼承父類的方法。
添加子類特有的方法:在子類的原型對象上添加子類特有的方法。
創(chuàng)建子類實例:通過子類構造函數(shù)創(chuàng)建子類的實例,并調(diào)用繼承自父類的方法以及子類自己的方法。
通過以上步驟,你就可以使用組合繼承在JavaScript中實現(xiàn)父類和子類之間的繼承關系。這種方式既能夠繼承父類的屬性,又能夠繼承父類的方法,并且還能添加子類特有的方法。
優(yōu)點
子類實例能夠擁有父類的屬性和方法,包括通過原型繼承得到的共享方法。
子類實例能夠擁有自己獨有的屬性和方法。
使用原型鏈繼承時,父類的原型方法可以在子類實例上直接訪問,減少了內(nèi)存占用。
借用構造函數(shù)繼承可以避免引用類型屬性的共享問題。
缺點
在使用組合繼承時,每次創(chuàng)建子類實例都會調(diào)用一次父類的構造函數(shù),導致父類的屬性被重復定義。
原型鏈繼承會將父類的屬性方法復制到子類的原型上,可能導致內(nèi)存占用過大。
組合繼承需要調(diào)用兩次父類的構造函數(shù),一次是在子類的構造函數(shù)中調(diào)用?
Parent.call(this)
,一次是通過?Child.prototype = new Parent()
?實現(xiàn)原型繼承。這樣做既增加了調(diào)用次數(shù),也可能導致父類構造函數(shù)中的邏輯被執(zhí)行多次。
總結來說,組合繼承是一種常用的繼承方式,它既能夠繼承父類的屬性和方法,又能夠擁有自身獨有的屬性和方法。但它的缺點是在創(chuàng)建子類實例時會重復調(diào)用父類的構造函數(shù),可能導致內(nèi)存占用過大,并且需要額外處理父類構造函數(shù)中的邏輯。
結語
牽手 持續(xù)為你分享各類知識和軟件 ,歡迎訪問、關注、討論 并留下你的小心心?