js繼承的6種方式

2021-10-24 11:43:39 字數 3121 閱讀 5465

想要繼承,就必須要提供個父類,(繼承誰,提供繼承的屬性

function

person

(name)

} person.prototype.age=10;

//給建構函式新增了原型屬性

function

per(

) per.prototype=

newperson()

;var per1=

newper()

; console.

log(per1.age)

;//10

//instanceof 判斷元素是否在另乙個元素的原型鏈上

//per1繼承了person的屬性,返回true

console.

log(per1 instanceof

person);

//true

重要的是讓per.prototype=new person();

特點:

function

con(

)var con1=

newcon()

; console.

log(con1.name)

;//jer

console.

log(con1.age)

;//12

console.

log(con1 instanceof

person);

//false

特點:只繼承了父類建構函式的屬性,沒有繼承父類原型的屬性;可以繼承多個建構函式屬性,在子例項中可向父例項傳參;

//組合原型鏈和建構函式繼承

function

subtype

(name)

subtype.prototype=

newperson()

;//原型鏈繼承

var sub=

newsubtype

("gar");

console.

log(sub.name)

;//"gar"繼承了建構函式屬性

console.

log(sub.age)

;//10繼承了父類原型的屬性

結合了兩種模式的優點,

特點:1.可以繼承父類原型上的屬性,可以傳參,可復用。

2.每個新例項引入的建構函式屬性式私有的。

function

content

(obj)

f.prototype=obj;

return

newf()

;}var sup =

newperson()

;//拿到了父類的例項

var sup1=

content

(sup)

; console.

log(sup1.age)

;//繼承了父類函式的屬性

function

content

(obj)

f.prototype=obj;

//繼承了傳入的引數

return

newf()

;//返回函式物件

}var sup=

newperson()

;//以上式原型式繼承,給原型式繼承再套個殼子傳遞引數

function

subobject

(obj)

var sup2=

subobject

(sup)

;//這個函式經過宣告之後就成了可增添屬性的物件

console.

log(

typeof subobject)

;//function

console.

log(

typeof sup2)

;//object

console.

log(sup2.name)

;//"gar",返回了sub物件,繼承了sub的屬性

重點:就是給原型式繼承外面套了個殼子。

優點:沒有建立自定義型別,因為只是套了個殼子返回物件(這個),這個函式順理成章就成了建立的新物件。

缺點:沒用到原型,無法復用。

//寄生

function

content

(obj)

f.prototype=obj;

return

newf()

;}//content就是f例項的另一種表示法

var con=

content

(person.prototype)

;//con例項(f例項)的原型繼承了父類函式的原型

//上述更像是原型鏈繼承,只不過只繼承了原型屬性

//組合

function

sub(

)//解決了組合式兩次呼叫建構函式屬性的缺點

//重點

sub.prototype=con;

//繼承了con例項

con.constructor=sub;

//一定要修復例項

var sub1=

newsub()

;//sub的例項就繼承了建構函式屬性,父類例項,con的函式屬性

console.

log(sub1.age)

;//10

重點:修復了組合繼承的問題

繼承這些知識點與其說是物件的繼承,更像是函式的功能用法,如何用函式做到復用,組合,這些和使用繼承的思考是一樣的。上述幾個繼承的方法都可以手動修復他們的缺點,但就是多了這個手動修復就變成了另一種繼承模式。

這些繼承模式的學習重點是學它們的思想,不然你會在coding書本上的例子的時候,會覺得明明可以直接繼承為什麼還要搞這麼麻煩。就像原型式繼承它用函式複製了內部物件的乙個副本,這樣不僅可以繼承內部物件的屬性,還能把函式(物件,**內部物件的返回)隨意呼叫,給它們新增屬性,改個引數就可以改變原型物件,而這些新增的屬性也不會相互影響。

js繼承6種方式實現

三 組合繼承 組合原型鏈繼承和借用建構函式繼承 常用 重點 結合了兩種模式的優點,傳參和復用 特點 1 可以繼承父類原型上的屬性,可以傳參,可復用。2 每個新例項引入的建構函式屬性是私有的。缺點 呼叫了兩次父類建構函式 耗記憶體 子類的建構函式會代替原型上的那個父類建構函式。繼承這些知識點與其說是物...

JS 6種繼承方式

首先定義乙個父類 建構函式 function animal name 原型上面的方法 animal.prototype.eat function food 核心 將父類的例項作為子類的原型function dog dog.prototype newanimal 將animal的例項掛載到了dog的原...

理解js繼承的6種方式

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