JavaScript高级程序设计(第3版)学习笔记10 再访(6)

var cs2 = new ColorSquare(); console.info(cs2.coordinate);//[0,0] cs.coordinate[1] = 1; console.info(cs2.coordinate);//[0,1],修改cs会导致cs2也修改

 
借用构造函数  

function Square(){//正方形 this.width = 10;//边长 this.coordinate = [0,0];//左上顶点的坐标 } Square.prototype.getArea = function(){//计算面积 return this.width * this.width; }; function ColorSquare(){//有颜色的正方形 Square.call(this);//实现继承 this.color = 'red'; } var cs = new ColorSquare(); var cs2 = new ColorSquare(); console.info(cs.coordinate);//[0,0] console.info(cs2.coordinate);//[0,0] cs.coordinate[1] = 1; console.info(cs.coordinate);//[0,1] console.info(cs2.coordinate);//[0,0],互相独立,修改cs不影响cs2 try{ console.info(cs.getArea());//异常,不能访问父类原型中方法 }catch(e){ console.info(e);//TypeError }

 

1、使用借用构造函数时,可以在call调用时传递参数。

2、同时也不存在引用类型共享的问题。

3、借用构造函数的缺点是,子类不能访问父类原型中定义的方法

 
组合继承  

function Square(){//正方形 this.width = 10;//边长 this.coordinate = [0,0];//左上顶点的坐标 } Square.prototype.getArea = function(){//计算面积 return this.width * this.width; }; function ColorSquare(){//有颜色的正方形 Square.call(this);//创建子类实例时,第二次调用父类构造函数 this.color = 'red'; } ColorSquare.prototype = new Square();//第一次调用 ColorSquare.prototype.getColor = function(){//获取颜色 return this.color; } var cs = new ColorSquare(); var cs2 = new ColorSquare(); console.info(cs.coordinate);//[0,0] console.info(cs2.coordinate);//[0,0] cs.coordinate[1] = 1; console.info(cs.coordinate);//[0,1] console.info(cs2.coordinate);//[0,0],互相独立,修改cs不影响cs2 console.info(cs.getArea());//100,可以访问

 

1、组合继承也称为伪经典继承,是将原型链和借用构造函数两种方式结合起来的继承方式。

2、基本思想是:

(1)使用原型链实现对原型属性和方法的继承

(2)使用借用构造函数实现对实例属性的继承

3、组合继承避免了原型链和借用构造函数的缺点,融合了它们的优点,是最常用的继承方式。

4、组合继承的缺点是需要调用两次父类的构造函数

 
原型式继承  

内容版权声明:除非注明,否则皆为本站原创文章。

转载注明出处:https://www.heiqu.com/wddsdz.html