1. 程式人生 > >javascript面向物件程式設計--繼承--多重繼承+摻元類(多親繼承)

javascript面向物件程式設計--繼承--多重繼承+摻元類(多親繼承)

繼承一般包括 單向繼承 和 多重繼承

  多重繼承:一個子類繼承多個超類

function A(x){this.x=x;}

A.prototype.getx=function(){return  this.x;}

function B(y){this.y=y;}

B.prototype.gety=function(){return this.y;}

function C(x,y){}

Function.prototype.extend=function(o){//方法一,使用複製繼承

  for(var i in o){this.constructor.prototype[i]=o[i];}

}

function C(x,y){//方法二,使用類繼承

A.call(this.x)

B.call(this.y)

}

C.extend(new A(10));

C.extend(new B(20));

alert(C.x)//10  alert(C.y)//20  alert(C.getx());//10 alert(C.gety());20

摻元類:一個類被多個類繼承,成為多親繼承,這個被多個類繼承的類稱為摻元類

var F=function(x,y){this.x=x;this.y=y}

F.prototype={

  getx:function(){return this.x;},

  gety:function(){return this.y;}

}

A=function(x,y){F.call(this,x,y)};//類繼承

B=function(x,y){F.call(this,x,y)}

//使用原型繼承方法,但是原型繼承需要例項化類F,可以專門模仿複製繼承設計一個專門函式來實現這種繼承關係

function extend(Sub,Sup){//摻元類繼承封裝函式

    for(m in Sup.prototype){//遍歷摻元類的原型物件

       if(!Sub.prototype[m]){Sub.prototype[m]=Sup.prototype[m];}//如果子類沒有存在同名成員,進行復制

  }

}

extend(A,F);

extend(B,F);

var a=new A(1,2) // 例項化後就可以呼叫F的通用方法

var b=new B(10,20)

可以利用這兩種方法,把多個子類合併到一個類中,實現多重繼承

var A=function(){}

A.prototype={

   x:function(){return 'x'}

}

var B=function(){}

B.prototype={

   y:function(){return 'y'}

}

C=function(){};

extend(C,A);

extend(C,B);

var c=new C();

alert(c.x());alert(c.y())