JS繼承的理解

2021-10-08 16:35:14 字數 2410 閱讀 8925

function

person

(name)

person.prototype.

getname

=function()

function

young

(age)

young.prototype =

newperson()

;let young =

newyoung(22

);

控制台測試列印結果

將父類的例項作為子類的原型,這樣子類就可以通過原型鏈得到父類建構函式中的例項屬性以及父類原型中的方法和屬性。父建構函式被呼叫了兩次。

缺點:在子類例項建立之前建立了父類的例項,無法向父類傳遞引數。

父類的屬性和方法被所有子類共用,父類方法或屬性改變時,所有子類繼承的方法和屬性都會隨之改變。

function

person

(name)

person.prototype.

getname

=function()

function

young

(name,age)

let young =

newyoung

("lucy",22

);

控制台測試列印結果

通過在子類中呼叫父類來繼承父類構造方法中的屬性。

缺點:不能繼承父類原型上的屬性和方法。

function

person

(name)

person.prototype.

getname

=function()

function

young

(name)

young.prototype =

newperson()

;let young =

newyoung

("lucy");

young.prototype.constructor = young;

//改變構造器指向

組合式繼承利用了上面兩種方式的優點,實現了既可以實現向父類傳參,又可以通過原型鏈繼承父類原型上的方法和屬性。

缺點:子類共享父類原型的屬性和方法。

function

person()

person.prototype.

getname

=function()

function

young()

function

create

(obj);f

.prototype = obj.prototype;

return

newf()

;}young.prototype =

create

(person)

;let young =

newyoung()

;

在直接繼承的基礎上,增加了乙個中間空物件,這使在修改子物件的原型物件時,不會影響到父物件的原型物件。

es5的object.create()擁有與上面create()類似的效果。object.create(proto,propertites)

通過借用建構函式來繼承屬性,通過原型鏈來繼承方法。建立乙個父類的副本,子類原型物件修改時,不會影響父類原型物件。

ps:

js繼承的初步理解

這是乙個父類 function father fathername function son1 son1.prototype newfather 父類 繼承了父類的所有屬性 let a1 newson1 let a2 newson1 console.log a1.fathername 輸出 父類 c...

深入理解js繼承

var nam var man1 man1.name hkj man1.age 20 function man name,age var man2 man hkj 20 function man name,age var man3 new man3 hkj 20 vat man4 new man4 ...

理解js繼承的6種方式

想要繼承,就必須要提供個父類 繼承誰,提供繼承的屬性 一 原型鏈繼承 重點 讓新例項的原型等於父類的例項。特點 1 例項可繼承的屬性有 例項的建構函式的屬性,父類建構函式屬性,父類原型的屬性。新例項不會繼承父類例項的屬性!缺點 1 新例項無法向父類建構函式傳參。2 繼承單一。3 所有新例項都會共享父...