JS繼承(實用)

2021-10-07 06:13:35 字數 2384 閱讀 3170

前言:js繼承常規共有6種方法,分別:

1.原型鏈繼承

2. 建構函式繼承

3. 組合繼承(原型鏈繼承+建構函式繼承)

4. 原型式繼承

5. 寄生式繼承

6. 寄生組合式繼承

但是真正能使用的只有3和6兩種繼承而已,應為其他的繼承方式都不是完整的繼承多會有或多或少的欠缺,接下來就為大家講解各個繼承的詳解

首先我們定義乙個父類:

function

animal

(name)

animal.prototype.

sayname

=function()

一、原型鏈繼承

function

cat(age)

cat.prototype =

newanimal

("mao");

cat.prototype.constructor = cat;

const cat1 =

newcat(1

);const cat2 =

newcat(2

);

首先,這裡cat.prototype為什麼不直接等於animal.prototype,而等於animal例項是因為animal.prototype是個物件(物件的賦值不會另外開闢乙個空間,而是建立乙個指標指向這個物件),所以當我們修改cat.prototype時會連帶修改了animal.prototype。

缺點:

1.子類例項會共享父類例項屬性(cat1修改__proto__的name,cat2的__proto__上的name同時會被修改)。

二、建構函式繼承

function

cat(age)

const cat =

newcat(1

);

注意這裡:cat1 instanceof animal為false。

缺點:

1.只繼承了父類建構函式的屬性,沒有繼承父類原型的屬性。

2.無法實現建構函式的復用(每次子類呼叫都要重新呼叫父類建構函式),導致每個子類例項都有父類建構函式的副本,臃腫。

三、組合繼承

function

cat(age)

cat.prototype =

newanimal

("mao2");

cat.prototype.constructor = cat;

const cat =

newcat()

;

缺點:

1.呼叫了兩次父類建構函式(耗記憶體)。

2.子類建構函式會代替原型上的父類建構函式。(cat.name等於mao1而不等於mao2)

四、原型式繼承

function

medium

(obj);f

.prototype = obj;

return

newf()

}let animal =

medium

(new

animal()

);animal.age =1;

//定義animal私有屬性

缺點:

1、所有例項都會繼承原型上的屬性。

2、無法實現復用。(新例項屬性都是後面新增的)

五、寄生式繼承

function

medium

(obj);f

.prototype = obj;

return

newf()

;}function

submedium

(obj)

let animal =

submedium

(new

animal()

);

缺點:

1.沒用到原型,無法復用。

六、寄生組合式繼承

function

medium

(obj);f

.prototype = obj;

return

newf()

;}function

cat(age)

const sub =

medium

(animal.prototype)

;cat.prototype = sub;

sub.constructor = cat;

js實用方法

判斷型別 千位符const milliformat num num num.tostring replace d g,m m.replace d g,深度轉殖 function deepclone obj var o isarray obj for i in obj return o 解析get請求...

實用js片段

演算法 加法 add 10,2 12 function add a,b catch f try catch f return e math.pow 10,math.max c,d mul a,e mul b,e e 減法 sub 10,2 8 function sub a,b catch f try...

js繼承(一)原型繼承

正式開工了 繼承在js中有著很大的地位,同時理解起來也比較抽象,我將分幾篇部落格來記錄js的繼承。原型繼承 相當於將父類物件與子類物件打通橋梁,可以靈活實現追加屬性與行為 子類擁有父類的一切行為和屬性。特點 非常純粹的繼承關係,例項是子類的例項,也是父類的例項 父類新增原型方法 原型屬性,子類都能訪...