//组合继承指的是将原型链和借用构造函数(call、apply)的技术组合到一起,从而发挥二者之长的一种继承模式,
//其背后的思路就是使用原型链实现对原型属性和方法的继承;
//而通过借用构造函数来实现对实例属性的继承。这样,既通过在原型上定义方法实现了函数复用,又能保证每个实例都有它自己的属性。
//详见《高三》6.3.3章节  2014-12-17

function SuperType(name) {
    this.superName = name;
    this.colors = ["red", "blue"];
}
SuperType.prototype.say = function () {
    document.write("Hello,I'm " + this.superName + "。<br/>");
}

function SubType(name, age) {
    SuperType.call(this, name); //借用构造函数继承,还可以给父类的构造函数传递参数

//定义子类自己的属性
    this.age = age;
}

/*** 因为上面子类构造函数继承了父类的实例成员,所以此处只需要继承父类的原型成员即可 ***/
//SubType.prototype = new SuperType(); //同时继承了基类的原型成员和实例成员,但这样写会使父类构造函数执行两次。(《高三》P172)
SubType.prototype = SuperType.prototype; //只继承基类的原型成员,而不继承实例成员。这样是最合理的,并且父类构造函数也只执行一次。

SubType.prototype.constructor = SubType;
SubType.prototype.SaySub = function () {
    document.write("Hello,My subName is " + this.superName + ",my age is: "+this.age+"。<br/>");
}

var instance1 = new SubType("wede",25);
instance1.colors.push("green");
document.write(instance1.colors); //red,blue,green
instance1.say(); //Hello,I'm wede。
instance1.SaySub(); //Hello,My subName is wede,my age is: 25。

var instance2 = new SubType("kitty", 18);
document.write(instance2.colors); //red,blue
instance2.say(); //Hello,I'm kitty。
instance2.SaySub(); //Hello,My subName is kitty,my age is: 18。

最新文章

  1. NOIp2016 游记
  2. QuickHit游戏
  3. 为IIS Express添加MIME映射
  4. QQ摄像头读取条码
  5. 我的第一份vim程序
  6. MVC中各类文件
  7. python 各模块
  8. wordpress教程之文章页single.php获取当前文章所属分类
  9. 错误:C:\Windows\System32\ssleay32.dll: Can&#39;t load IA 32-bit .dll on a AMD 64-bit
  10. cookie在vs又一次run的时候丢失
  11. IdentityServer4 通过 AccessToken 获取 UserClaims
  12. sprintf()、fprintf()、fscanf()的用法
  13. 复制程序到notepad++编辑器出现乱码的解决方法
  14. Swift 拷贝文件夹,实现文件夹内容整体复制
  15. Windows环境搭建mysql服务器
  16. kafka 学习资料
  17. iOS_URI跳转方式多种地图导航的代码实践
  18. Qt QpushButton 实现长按下功能
  19. jeecg框架解决跨域问题
  20. set方法在set传入值时报空指针异常,直接设置定值即可

热门文章

  1. arcgis python 随机取部分数据
  2. 多进程之间的互斥信号量的实现(Linux和windows跨平台)
  3. 如何在linux用户空间程序中打印时间戳?
  4. 阿里内部分享:我们是如何?深度定制高性能MySQL的
  5. 3GPP 5G UPF
  6. LVS+Keepalived小试牛刀
  7. Python中elasticsearch插入和更新数据的实现方法
  8. mysql表如何使用redis保存?
  9. js或者jquery直接下载网页上的图片代码
  10. whereis which type find