1 //1.原型链的继承
2 function Box(){
3 this.age=12;
4 }
5 function Desk(){
6 this.user="mly";
7 }
8 Desk.prototype=new Box();
9 var desk=new Desk();
10 alert(desk.age);//结果为:12
11 //缺点:子类型还无法给父类型传递参数
1 //2.对象冒充的继承
2 function Box(age){
3 this.age=age;
4 }
5 function Desk(age){
6 Box.call(this,age);
7 }
8 var desk=new Desk(1234);
9 alert(desk.age);//1234
10 //缺点:没有原型
1 //3.原型链+对象冒充
2 function Box(age){
3 this.age=age;
4 }
5 Box.prototype.startFunction=function(){
6 return this.age+"Box";
7 };
8 function Desk(user,age){
9 Box.call(this,age);
10 this.user=user;
11 }
12 Desk.prototype=new Box();//继承原型中的方法
13 var desk=new Desk("mly",12);
14 alert(desk.startFunction());
15 alert(desk.user);
16 alert(desk.age);
17 //缺点:如果继承的函数过多,书写繁琐
1 //4.寄生组合继承
2 function obj(o) {//将对象的原型放在某个对象的原型里面并返回
3 function F(){};
4 F.prototype = o;
5 return new F();
6 }
7 function create(box, desk) {//实现原型的继承
8 var f = obj(box.prototype);
9 f.constructor = desk;//调整原型的指针
10 desk.prototype = f;
11 }
12 function Box(user){
13 this.user=user;
14 if(typeof this.startFunction != "function"){
15 Box.prototype.startFunction=function(){
16 return this.user+"继承";
17 };
18 }
19 }
20 function Desk(user){
21 Box.call(this,user);//实现对象的继承
22 }
23 create(Box,Desk);
24 var desk=new Desk("mly");
25 alert(desk.startFunction());//结果:mly继承