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())