Javascript編程之繼承實(shí)例匯總
本文實(shí)例講述了Javascript編程之繼承。分享給大家供大家參考,具體如下:
這篇文字是在看完《Javascript 王者歸來(lái)》后的整理總結(jié),文章詳細(xì)章節(jié)在 第21章 P537
繼承一般要實(shí)現(xiàn)以下三層含義:
1)子類實(shí)例可以共享父類的方法;
2)子類可以覆蓋父類的方法或者擴(kuò)展新的方法;
3)子類和父類都是子類實(shí)例的類型。
一、構(gòu)造繼承法
子類中調(diào)用父類的構(gòu)造函數(shù)來(lái)維護(hù)的,該繼承法能實(shí)現(xiàn)多重繼承,但只能繼承父類的共有方法,無(wú)法繼承靜態(tài)方法,而且不能用instanceof來(lái)驗(yàn)證實(shí)例。
function a(){
this.say=function(){
alert("happy new year!");
}
}
function b(){
a.apply(this,arguments);
}
a.prototype.fuck=function(){
alert("%^&%^&%&^%&");
}
var oB=new b();
alert(oB instanceof a);// false
oB.say(); // happy new year
oB.fuck(); // 讀不到
二、原型繼承法/經(jīng)典繼承法
該繼承法是通過復(fù)制已經(jīng)存在的原型對(duì)象來(lái)實(shí)現(xiàn)行為重用,讓對(duì)象實(shí)例共享原型對(duì)象的屬性。支持多重繼承,繼承原型靜態(tài)方法,能用instanceof來(lái)驗(yàn)證實(shí)例。
function a(){
this.say=function(){
alert("happy new year!");
}
}
function b(){}
a.prototype.fuck=function(){
alert("%^&%^&%&^%&");
}
a.prototype.z=123;
b.prototype=new a();
var oB=new b();
alert(oB instanceof a); // true
alert(oB.z); // 123
oB.say(); // happy new year
oB.fuck(); // %^&%^&%&^%&
三、實(shí)例繼承法/寄生構(gòu)造函數(shù)模式
構(gòu)造法不能繼承類型的靜態(tài)方法,原型繼承得不完善(某些核心對(duì)象的不可枚舉方法不能繼承),而實(shí)例繼承法能對(duì)原生核心對(duì)象或者DOM對(duì)象進(jìn)行繼承,它通過在類型中構(gòu)造對(duì)象并返回的辦法來(lái)實(shí)現(xiàn)繼承,因此instanceof驗(yàn)證會(huì)是false,不支持多重繼承。
function a(){
var oA=new Array();
oA.say=function(){
alert("hello A!");
}
return oA;
}
var obj=new a();
alert(obj instanceof a); // false
obj.say();
四、拷貝繼承法
該方法通過拷貝基類對(duì)象的所有可枚舉屬性和方法來(lái)模擬繼承,因此它可以模擬多繼承,但不能枚舉的就無(wú)法繼承;它可以繼承父類的靜態(tài)方法;
function a(){
this.num=123;
this.say=function(){
alert("happy new year!");
}
}
function b(){
this.extends=function(obj){
for(each in obj){
this[each]=obj[each];
}
}
}
var oB=new b();
oB.extends(new a());
alert(oB instanceof a); // false
alert(oB.num); // 123
oB.say(); // happy new year
五、混合繼承法
顧名思義就是把上面幾種繼承法綜合起來(lái),取長(zhǎng)補(bǔ)短,讓繼承更完善。常見的有 構(gòu)造+原型繼承:偽經(jīng)典繼承
function a(){
this.num=123;
this.say=function(){
alert("happy new year!");
}
}
function b(){
a.apply(this);
}
b.prototype=new a();
b.prototype.z=123;
var oB=new b();
alert(oB instanceof a); // true
alert(oB.num); // 123
oB.say(); // happy new year
六、各種繼承法的優(yōu)缺點(diǎn)

希望本文所述對(duì)大家JavaScript程序設(shè)計(jì)有所幫助。
相關(guān)文章
從數(shù)組中隨機(jī)取x條不重復(fù)數(shù)據(jù)的JS代碼
這篇文章主要介紹了從數(shù)組中隨機(jī)取x條不重復(fù)數(shù)據(jù)的JS代碼,有需要的朋友可以參考一下2013-12-12
Bootstrap 模態(tài)框(Modal)插件代碼解析
Bootstrap 模態(tài)框(Modal)插件 模態(tài)框(Modal)是覆蓋在父窗體上的子窗體。這篇文章主要介紹了Bootstrap 模態(tài)框(Modal)插件代碼解析的相關(guān)資料,需要的朋友可以參考下2016-12-12
js原生實(shí)現(xiàn)FastClick事件的實(shí)例
下面小編就為大家?guī)?lái)一篇js原生實(shí)現(xiàn)FastClick事件的實(shí)例。小編覺得挺不錯(cuò)的,現(xiàn)在就分享給大家,也給大家做個(gè)參考。一起跟隨小編過來(lái)看看吧2016-11-11
使用JavaScript實(shí)現(xiàn)表格編輯器(實(shí)例講解)
下面小編就為大家?guī)?lái)一篇使用JavaScript實(shí)現(xiàn)表格編輯器(實(shí)例講解)。小編覺得挺不錯(cuò)的,現(xiàn)在就分享給大家,也給大家做個(gè)參考。一起跟隨小編過來(lái)看看吧2017-08-08
JavaScript調(diào)用模式與this關(guān)鍵字綁定的關(guān)系
這篇文章主要介紹了JavaScript調(diào)用模式與this關(guān)鍵字綁定的關(guān)系 的相關(guān)資料,需要的朋友可以參考下2018-04-04
Javascript中對(duì)象繼承的實(shí)現(xiàn)小例
這篇文章主要介紹了Javascript中對(duì)象繼承的實(shí)現(xiàn),需要的朋友可以參考下2014-05-05

