一 原型繼承
1.組合繼承
組合繼承是最常用的繼承方式
function
parent
(value)
parent.prototype.
getvalue
=function()
function
child
(value)
child.prototype =
newparent()
const child =
newchild(1
)child.
getvalue()
// 執行結果為 --- 1
以上方式實現繼承的核心是在子類建構函式中通過parent.call(this)繼承父類的屬性,然後改變子類的原型為new parent()來繼承父類的函式。
這種繼承方式的優點在於建構函式可以傳參,不會與父類引用屬性共享,可以復用父類的函式,但是也存在乙個缺點就是在繼承父類函式的時候呼叫了父類的建構函式,導致子類的原型上多出來不需要的父類屬性,造成記憶體浪費。
2.寄生組合繼承
這種繼承方式是對組合繼承的方式進行了優化
function
parent
(value)
parent.prototype.
getvalue
=function()
function
child
(value)
child.prototype = object.
create
(parent.prototype,})
const child =
newchild(1
)child.
getvalue()
// 執行結果為 --- 1
該方式實現繼承的核心是將父類的原型賦值給子類,並且將建構函式設定為子類,這樣既解決了無用的父類屬性問題,還能正確的找到子類的建構函式。
二 class繼承
其實在js中並不存在class類,class只是語法糖,本質上它還是函式
class
parent
getvalue()
}class
child
extends
parent
}let child =
newchild(1
)child.
getvalue()
// 執行結果為 --- 1
class實現繼承的核心是通過extends表明繼承自哪個父類,並且在子類建構函式中必須呼叫super()。因為這段**可以看作是 parent.call(child,value) JS實現繼承
1.使用物件冒充實現繼承 該種實現方式可以實現多繼承 實現原理 讓父類的建構函式成為子類的方法,然後呼叫該子類的方法,通過this關鍵字給所有的屬性和方法賦值 function parent firstname function child firstname var mychild new chi...
js實現繼承
通過修改原型的指向實現的繼承,雖然實現了繼承,但是繼承後的例項物件的屬性值都是一樣的 都是 zs,20,男 只有自己定義的屬性值不一樣。使用這種方式實現的繼承,不能繼承父類的方法,只能繼承父類的屬性。方式一 var obj1 通過這種方式只是讓obj2指向了和obj1相同的一塊位址空間,記憶體中只有...
js 實現繼承
在開始擺弄 之前,應該搞清楚使用繼承的目的和能帶來什麼好處。一般來說,在設計類的時候,我們希望能減少重複性的 並且盡量弱化類之間的耦合。而要做到這兩者都兼顧是很難的,我們需要根據具體的條件和環境下決定我們應該採取什麼方法。根據我們對物件導向語言中繼承的了解,繼承會帶類直接的強耦合,但js由於其特有的...