javascript-面向对象之继承

1.原型链继承(构造函数的原型对象等于另一个构造函数实例化的对象)

 

function Box(){ 

this.name='lee';

}

function Desk(){

this.age=100; 

}

Desk.prototype=new Box();//Desk继承了Box,形成了一个原型链;

var desk=new Desk(); 

alert(desk.name);//lee

function Table(){

this.height=100;

}

Table.prototype=new Desk();//  Table 继承了Desk

var table=new Table();//table具有两个继承的属性

使用原型链继承存在的问题:

1:当原型中存在引用类型时,存在数据修改的问题

2:子类类型的对象无法给父类传参数


 

2.对象冒充

 

function Test(age){

     this.family=["mom","dad"];

      this.age=age;

    }

    function Util(age){

        Test.call(this,age);//指明哪个对象来调用Test函数

        //this就是我们创建的Util对象

    }

对象冒充的问题 :不能使用原型 所有不能实现数据共享


 

  3.组合继承(原型链与对象冒充)

 

   function Test(age){

   this.family=["mom","dad"];

   this.age=age;

   }

   Test.prototype.fun=function(){

   return this.age+this.family;

   }

   function Util(age){

   Test.call(this,age); //对象冒充

   }

   util.prototype=new Text();//这是原型链

   var u=new Util(26);

   alert(u.age);

 

4.原型式继承  // o是一个对象

function getObj(o){//返回原型是o的一个对象

function F(){}

F.prototype=o;

return new F();

}

//原型对象

var person={

name:"Tom",

family:{'mom',"dad"}

}

var obj1=getObj(person);

 

5.寄生 继承(原型式+工厂模式)

 

 function getobj(o){

  function F(){};

  F.prototype=o;

  obj.arr=["html",'css'];

  return new F();

 }

 //寄生函数

 function createObj(o){

  var  obj=getobj(o);

  return obj;

 }

 //原型对象

 var person={

   name:"han",

   age:23

   }

 var a=createObj(person);

 

posted @ 2016-12-01 20:48  ShineRain  阅读(107)  评论(0编辑  收藏  举报