<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>寄生组合继承</title>
</head>
<body>
<script>
function inHeritPrototype(Son,Parent) {
var prototype=Object.create(Parent.prototype);
/*
es5语法,最后会返回一个new F()的实例,此实例的__proto__指向Parent.prototype
相当于function create(obj){
function F(){}
F.prototype=obj;
return new F()
}
*/
prototype.constructor=Son;
Son.prototype=prototype;
}
function Parent(name){
this.name=name;
this.colors=["red","black","blue"];
}
Parent.prototype.sayName=function () {
alert(this.name);
}
function Son(name,age) {
Parent.call(this,name);
this.age=age;
}
inHeritPrototype(Son,Parent);
Son.prototype.sayAge=function(){
alert(this.age);
}
var son=new Son('zxf',25);
console.log(Parent.prototype)
console.log(Son.prototype);//此处子类的原型没有继承父类的属性,而是直接继承了父类原型上的属性和方法,
//继承父类属性的语句是Parent.call()这句话实现的,这样就避免了组合式继承的缺点-调用了两个父类的构造函数,导致给子类的原型上添加了父类的实例属性
//最完美的是子类的原型上只继承父类的原型的属性,而不是继承父类实例的属性,通过寄生组合式继承可以实现子类实例之间修改引用类型的属性时互不影响
//因为这句话Parent.call()让每个子类都有个父类属性的一个副本,是一个等于在子类实例上各自创建了属性而不是指向父类的属性,另外
//通过inHeritPrototype方法实现了子类只继承父类原型上的方法和属性,这里实现了属性和方法的共享,可谓完美啊
</script>
</body>
</html>

最新文章

  1. windows 7(32/64位)GHO安装指南(U盘制作篇)~
  2. 2.Java异常学习
  3. 怎样设置Word下次打开时跳转到上次阅读的位置
  4. 转:XBMC源代码分析
  5. [OpenCV] Image Processing - Fuzzy Set
  6. C语言 百炼成钢5
  7. python开源项目及示例代码
  8. python下redis的基本操作:
  9. js获取屏幕(设备)宽高
  10. [Windows Phone学习笔记]页面之间传递对象
  11. TOGAF架构内容框架之概述及架构工作产品分类
  12. 前端开发【第1篇:HTML】
  13. 拦截过滤防御XSS攻击 -- Struts2.3 以及 2.5 的解决方式
  14. 在使用可变数组过程中遇到*** Terminating app due to uncaught exception &#39;NSInternalInconsistencyException&#39;, reason: &#39;-[__NSCFDictionary setObject:forKey:]: mutating method sent to immutable object&#39;问题
  15. 【转】C++ 11 并发指南一(C++ 11 多线程初探)
  16. maven如何单独启动插件目标
  17. 将自己写的HDL代码封装成带AXI总线的IP
  18. iOS,添加阴影
  19. python装饰器介绍
  20. 判断元素16种方法expected_conditions

热门文章

  1. oracle学习笔记(六)——函数&amp;存储过程的异同
  2. jq轮播图
  3. diverta 2019 Programming Contest 2自闭记
  4. 关于本人:-D(必读)
  5. CF 1096D Easy Problem [动态规划]
  6. Python笔记_第一篇_面向过程_第一部分_9.Ubuntu基础操作
  7. 十大经典排序算法(Javascript实现)
  8. winEdt 使用
  9. 01 - CentOS 中安装Python 2.7.16
  10. linux c 调用 python