复制继承:利用for/in语句遍历对象成员,逐一复制给另一个对象
funciton F(x,y){
this.x=x;
this.y=y;
this.add=function(){
return this.x+this.y;
}
}
F.prototype.mul=function(){
return this.x*this.y;
}
var f=new F(2,3)
var o={}
for( var i in f){
o[i]=f[i];
}
alert(o.x);//2
alert(o.add());//5
alert(o.mul());//6
对其封装,使得=其具有更大的灵活性
Function.prototype.extend=function(){
for (var i in o){
this.constructor.protptype.[i]=o[i];//把参数成员对象复制给当前对象的构造函数原型对象
}
}
var o=function(){};
o.extend(new F(2,3))
复制继承:能够继承 原型属性 本地成员 ,支持多重继承 ,不支持多参数 执行效率低 instanceof 为false
克隆继承:避免复制继承带来的低效率
Function.prototype.clone=function(o){
function Temp(){};
Temp.prototype=o;
return new Temp();
}
var o=Function.clone(new F(2,3))//调用Function对象的克隆方法
alert(o.x);//2
alert(o.add());//5
alert(o.mul());//6
克隆继承:继承原型属性,本地成员;不支持多重继承,不支持多参数,执行效率低,instanceof 为false
混合继承:发挥各自优势,扬长避短
原型继承+类继承
function A(x,y){
this.x=x;
this.y=y;
}
A.prototype.add=function(){//原型继承
return this.x+this.y;
}
function B(x,y){//类继承
A.call(this,x,y);
}
B.prototype=new A();
var b=new B(10,20);
alert(b.x);//10
alert(b.y);//20
alert(b.add());//30
原型继承+复制继承混合同样也能达到这样的效果