首頁 >web前端 >js教程 >Javascript程式設計之繼承實例彙總_javascript技巧

Javascript程式設計之繼承實例彙總_javascript技巧

WBOY
WBOY原創
2016-05-16 15:29:181044瀏覽

本文實例講述了Javascript程式設計之繼承。分享給大家參考,具體如下:

這篇文字是在看完《Javascript 王者歸來》後的整理總結,文章詳細章節在 第21章 P537

繼承一般要實現以下三層意義:

1)子類別實例可以共用父類別的方法;
2)子類別可以覆寫父類別的方法或擴充新的方法;
3)子類別和父類別都是子類別實例的型別。

一、構造繼承法

子類別中呼叫父類別的建構子來維護的,該繼承法能實現多重繼承,但只能繼承父類別的共有方法,無法繼承靜態方法,而且不能用instanceof來驗證實例。

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();       // 读不到

二、原型繼承法/經典繼承法

此繼承法是透過複製已經存在的原型物件來實現行為重複使用,讓物件實例共享原型物件的屬性。支援多重繼承,繼承原型靜態方法,能用instanceof來驗證實例。

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();       // %^&%^&%&^%&

三、實例繼承法/寄生建構子模式

建構法不能繼承類型的靜態方法,原型繼承得不完善(某些核心物件的不可枚舉方法不能繼承),而實例繼承法能對原生核心物件或DOM物件進行繼承,它透過在型別中建構物件並傳回的辦法來實現繼承,因此instanceof驗證會是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();

四、拷貝繼承法

此方法透過拷貝基底類別物件的所有可枚舉屬性和方法來模擬繼承,因此它可以模擬多重繼承,但不能列舉的就無法繼承;它可以繼承父類別的靜態方法;

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

五、混合繼承法

顧名思義就是把上面幾種繼承法綜合起來,取長補短,讓繼承更完善。常見的有 構造 原型繼承:偽經典繼承

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

六、各種繼承法的優缺點

希望本文所述對大家JavaScript程式設計有所幫助。

陳述:
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn