javascript---继承

原型链继承:

父类:也称超类型

子类:称子类型

 

先写三个函数:

1     function Box(){                //被继承的函数叫超类型
2         this.name='Lee';
3     }
4     function Desk(){            //继承的函数叫子类型
5         this.age=100;
6     }
7     function Table(){
8         this.level='jack';
9     }

 

 

下面是继承:

1     Desk.prototype=new Box();            //继承之后才实例化对象
2     var desk=new Desk();
3     alert(desk.name);                //Lee
4     Table.prototype=new Desk();
5     var table=new Table();
6     alert(table.name+' '+table.age);        //Lee100

其实最主要的一句话是:Desk.prototype=new Box()和Table.prototype=new Desk();这两句是实现原型链的关键。

解答:超类型实例化之后的对象实例复制给子类型的原型属性;new Box()会将Box构造里的信息和原型都交给Desk;Desk的原型得到的是Box的构造+原型的信息

 

 


如果被继承函数有原型属性又有实例属性,访问的时候一样是就近原则:实例有的就返回,没有就找原型。

 

下面是示例函数:

1     function Box(){                //被继承的函数叫超类型
2         this.name='Lee';
3     }
4     Box.prototype.name='Jack';            //增加原型属性
5     function Desk(){            //继承的函数叫子类型
6         this.age=100;
7     }

 

Desk继承Box:

 

1     Desk.prototype=new Box();        //原型链继承
2     var desk=new Desk();
3     var box=new Box();
4     alert(desk.name);            //就近原则,实例有就返回,没有就找原型        Lee

 

 


 

子类型与父类型相同的属性会被子类型覆盖,而子类型没有的属性会继承

 

 1     function Box(name,age){                //被继承的函数叫超类型
 2         this.name=name;
 3         this.age=age;
 4     }
 5     Box.prototype.run=function(){
 6         return this.name+this.age+'运行中·······';
 7     }
 8     function Desk(){            //继承的函数叫子类型
 9         this.name='jack';
10     }
11     Desk.prototype=new Box('Lee',100);        //原型链继承
12     var desk=new Desk();
13     alert(desk.run());        //jack100运行中········
14     alert(desk.name);        //jack

解答:因为Desk里有name属性,所以会覆盖继承来的Box里的name属性,所以Lee被jack覆盖了。

 


 

继承图:

 

posted @ 2016-03-22 15:43  GacentJohn  阅读(107)  评论(0编辑  收藏  举报