前言: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的繼承。原型繼承 相當於將父類物件與子類物件打通橋梁,可以靈活實現追加屬性與行為 子類擁有父類的一切行為和屬性。特點 非常純粹的繼承關係,例項是子類的例項,也是父類的例項 父類新增原型方法 原型屬性,子類都能訪...