JavaScript寄生组合式继承原理与用法分析


Posted in Javascript onJanuary 11, 2019

本文实例讲述了JavaScript寄生组合式继承。分享给大家供大家参考,具体如下:

寄生组合式继承

寄生组合式继承,就是通过伪造对象来继承属性,通过原型链的混成形式来继承方法。

这种技术的基本思路是:不必为了指定子类型的原型而调用超类型的构造函数,因为我们所需要的只是超类型原型的一个副本而已(这一点正是组合继承的问题,并且正是JavaScript这种原型式语言的强大之处,直接copy对象-原型对象)。本质上,就是使用寄生式继承来继承超类型的原型,然后再将结果指定给子类型的原型。

function inheritPrototype(subType, superType){
  var prototype = Object.create(superType.prototype); //创建超类型原型副本
  prototype.constructor = subType;          //修改原型副本的不同属性
  subType.prototype = prototype;           //指定原型
}
function SuperType(name){
  this.name = name;
  this.colors = ["red", "blue", "green"];
}
SuperType.prototype.sayName = function(){
  console.log(this.name);
}
function SubType(name, age){
  //继承属性
  SuperType.call(this, name);
  //实例属性
  this.age = age;
}
//继承方法
inheritPrototype(SubType, SuperType);
SubType.prototype.sayAge = function(){
  console.log(this.age);
};
var instance1 = new SubType("Nicholas", 29);
instance1.colors.push("black");
console.log(instance1.colors); //"red, blue, green, black"
instance1.sayName();      //"Nicholas"
instance1.sayAge();      //29

这里使用在线HTML/CSS/JavaScript代码运行工具:http://tools.3water.com/code/HtmlJsRun测试上述代码,可得如下运行结果:

JavaScript寄生组合式继承原理与用法分析

这个是寄生组合式继承的最简单形式。这个函数接收两个参数:

1. 子类型构造函数
2. 超类型构造函数

在函数内部,寄生组合式继承最简形式分为3个步骤:

1. 创建超类型原型副本;
2. 为创建的副本指定constructor属性,从而弥补因为重写SubType原型而失去的默认的constructor属性,这个原型副本的constructor属性变化:SuperType ?> SubType;
3. 将该完善好的副本赋值给子类型的原型。

寄生组合式继承的图解如下:

JavaScript寄生组合式继承原理与用法分析

寄生组合式继承的高效率体现在它只调用了一次SuperType构造函数,并且因此避免了在SubType.prototype上面创建不必要的,多余的属性。与此同时,原型链还能保持不变。

更多关于JavaScript相关内容还可查看本站专题:《javascript面向对象入门教程》、《JavaScript错误与调试技巧总结》、《JavaScript数据结构与算法技巧总结》、《JavaScript遍历算法与技巧总结》及《JavaScript数学运算用法总结》

希望本文所述对大家JavaScript程序设计有所帮助。

Javascript 相关文章推荐
DWZ table的原生分页浅谈
Mar 01 Javascript
使用AngularJS处理单选框和复选框的简单方法
Jun 19 Javascript
JavaScript小技巧整理篇(非常全)
Jan 26 Javascript
js判断主流浏览器类型和版本号的简单实现代码
May 26 Javascript
js实现九宫格拼图小游戏
Feb 13 Javascript
bootstrap table实现单击单元格可编辑功能
Mar 28 Javascript
微信小程序学习之数据处理详解
Jul 05 Javascript
3种vue组件的书写形式
Nov 29 Javascript
vue.js 获取select中的value实例
Mar 01 Javascript
Vue源码学习之关于对Array的数据侦听实现
Apr 23 Javascript
部署vue+Springboot前后端分离项目的步骤实现
May 31 Javascript
JavaScript代码实现微博批量取消关注功能
Feb 05 Javascript
JavaScript常见继承模式实例小结
Jan 11 #Javascript
JavaScript惰性求值的一种实现方法示例
Jan 11 #Javascript
JavaScript创建对象的四种常用模式实例分析
Jan 11 #Javascript
详解Vue项目部署遇到的问题及解决方案
Jan 11 #Javascript
VeeValidate 的使用场景以及配置详解
Jan 11 #Javascript
JS函数节流和防抖之间的区分和实现详解
Jan 11 #Javascript
微信公众号H5支付接口调用方法
Jan 10 #Javascript
You might like
深入分析php之面向对象
2013/05/15 PHP
深入PHP与浏览器缓存的分析
2013/06/03 PHP
php使用curl下载指定大小的文件实例代码
2017/09/30 PHP
javascript同步Import,同步调用外部js的方法
2008/07/08 Javascript
jQuery ajax 路由和过滤器使用说明
2011/08/02 Javascript
Dom操作之兼容技巧分享
2011/09/20 Javascript
IE8对JS通过属性和数组遍历解析不一样的地方探讨
2013/05/06 Javascript
$.each与$().each的区别示例介绍
2014/03/20 Javascript
jQuery前端框架easyui使用Dialog时bug处理
2014/12/05 Javascript
JavaScript实现文本框中默认显示背景图片在获得焦点后消失的方法
2015/07/01 Javascript
AngularJS使用angular-formly进行表单验证
2015/12/27 Javascript
jQuery基本筛选选择器实例代码
2017/02/06 Javascript
js绑定事件和解绑事件
2017/04/27 Javascript
Node.js中使用mongoose操作mongodb数据库的方法
2017/09/12 Javascript
Javascript实现一朵从含苞到绽放的玫瑰
2019/03/30 Javascript
Vue封装Axios请求和拦截器的步骤
2020/09/16 Javascript
Python中将dataframe转换为字典的实例
2018/04/13 Python
python用插值法绘制平滑曲线
2021/02/19 Python
对python 判断数字是否小于0的方法详解
2019/01/26 Python
Python django框架应用中实现获取访问者ip地址示例
2019/05/17 Python
Tensorflow实现酸奶销量预测分析
2019/07/19 Python
python提取照片坐标信息的实例代码
2019/08/14 Python
新手常见Python错误及异常解决处理方案
2020/06/18 Python
keras 模型参数,模型保存,中间结果输出操作
2020/07/06 Python
AE美国鹰日本官方网站: American Eagle Outfitters
2016/12/10 全球购物
ghd澳大利亚官方网站:英国最受欢迎的美发工具品牌
2018/05/21 全球购物
给排水工程师岗位职责
2013/11/21 职场文书
综合素质自我评价怎么写
2014/09/14 职场文书
六查六看心得体会
2014/10/14 职场文书
教师党员学习十八届四中全会思想汇报
2014/11/03 职场文书
质量整改报告范文
2014/11/08 职场文书
离婚撤诉申请书范本
2015/05/18 职场文书
教师节联欢会主持词
2015/07/04 职场文书
SpringBoot整合RabbitMQ的5种模式实战
2021/08/02 Java/Android
多人盗宝《绿林侠盗》第三赛季4.5上线 跨平台实装
2022/04/03 其他游戏
MYSQL中文乱码问题的解决方案
2022/06/14 MySQL