js常用的繼承--組合式繼承
組合繼承有時候也叫偽經(jīng)典繼承,指的是將原型鏈和借用構(gòu)造函數(shù)技術(shù)組合到一塊,從而發(fā)揮二者之長的一種繼承模式,其背后的思路是使用原型鏈實現(xiàn)對原型屬性和方法的繼承,而通過借用構(gòu)造函數(shù)來實現(xiàn)對實例屬性的繼承。這樣既通過在原型上定義方法實現(xiàn)了函數(shù)復(fù)用,又能保證每個實例都有它的自己的屬性。
function SuperType(name){
this.name=name;
this.colors=["red","blue","green"];
}
SuperType.prototype.sayName=function(){
console.log(this.name);
}
function SubType(name,age){
SuperType.call(this,name);
this.age=age;
}
SubType.prototype=new SuperType();
SubType.prototype.constructor=SubType;
SubType.prototype.sayAge=function(){
console.log(this.age);
}
var instance1=new SubType("zxf",24);
instance1.colors.push("black");
console.log(instance1.colors);//["red","blue","green","black"]
instance1.sayName();//"zxf"
instance1.sayAge();//24
var instance2=new SubType("jay",36);
console.log(instance2.colors);//["red","blue","green"]
instance2.sayName();//"jay"
instance2.sayAge();//36
在這個例子中,supertype構(gòu)造函數(shù)定義了兩個屬性,name和colors。supertype的原型定義了一個方法sayname()。subtype構(gòu)造函數(shù)調(diào)用supertype時傳入了name參數(shù),緊接著又定義了它自己的屬性age。然后將supertype的實例賦值給subtype的原型,然后又在該新原型上定義了方法sayage()。這樣一來,就可以讓兩個不同的subtype實例既可以擁有屬性--包括colors屬性,又可以使用相同的方法。
組合式繼承缺點(diǎn)是:調(diào)用了兩次supertype構(gòu)造函數(shù),一次在賦值subtype的原型時,一次在實例化子類時call調(diào)用,這次調(diào)用會屏蔽原型中的兩個同名屬性。
參考書籍:Javascript高級程序設(shè)計(第3版);
以上就是本文的全部內(nèi)容,希望本文的內(nèi)容對大家的學(xué)習(xí)或者工作能帶來一定的幫助,同時也希望多多支持腳本之家!
相關(guān)文章
UniApp使用manifest.json應(yīng)用配置的超詳細(xì)教學(xué)
這篇文章主要給大家介紹了關(guān)于uni-app應(yīng)用配置manifest.json最全最詳細(xì)配置,manifest.json文件是應(yīng)用的配置文件,用于指定應(yīng)用的名稱、圖標(biāo)、權(quán)限等,文中通過代碼介紹的非常詳細(xì),需要的朋友可以參考下2024-01-01
JavaScript中${pageContext.request.contextPath}取值問題及解決方案
這篇文章主要介紹了JavaScript中${pageContext.request.contextPath}取值問題及解決方案的相關(guān)資料,需要的朋友可以參考下2016-12-12
swiperjs實現(xiàn)導(dǎo)航與tab頁的聯(lián)動
這篇文章主要為大家詳細(xì)介紹了swiperjs實現(xiàn)導(dǎo)航與tab頁的聯(lián)動,文中示例代碼介紹的非常詳細(xì),具有一定的參考價值,感興趣的小伙伴們可以參考一下2020-12-12
基于Arcgis for javascript實現(xiàn)百度地圖ABCD marker的效果
本篇文章由腳本之家小編給大家分享的基于Arcgis for javascript實現(xiàn)百度地圖ABCD marker的效果,需要的朋友一起學(xué)習(xí)吧2015-09-09

