javascript面向对象编程--继承--复制继承+克隆继承 混合继承(常用)

复制继承:利用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

原型继承+复制继承混合同样也能达到这样的效果

猜你喜欢

转载自blog.csdn.net/wenmin1987/article/details/82825186