javascript---继承

mac2022-06-30  85

原型链继承:

父类:也称超类型

子类:称子类型

 

先写三个函数:

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覆盖了。

 


 

继承图:

 

转载于:https://www.cnblogs.com/GacentJohn/p/5306780.html

最新回复(0)