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 相关文章推荐
datePicker——日期选择控件(with jquery)
Feb 20 Javascript
对google个性主页的拖拽效果的js的完整注释[转]
Apr 10 Javascript
javascript OFFICE控件测试代码
Dec 08 Javascript
Jquery 常用方法经典总结
Jan 28 Javascript
使用UglifyJS合并/压缩JavaScript的方法
Mar 07 Javascript
利用div+jquery自定义滚动条样式的2种方法
Jul 18 Javascript
完善的jquery处理机制
Feb 21 Javascript
全面理解JavaScript中的闭包
May 12 Javascript
JavaScript指定断点操作实例教程
Sep 18 Javascript
微信小程序-form表单提交代码实例
Apr 29 Javascript
js基础之事件捕获与冒泡原理
Oct 09 Javascript
Vue表单控件数据绑定方法详解
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危险函数(disable_functions)
2012/02/23 PHP
PHP中round()函数对浮点数进行四舍五入的方法
2014/11/19 PHP
php处理抢购类功能的高并发请求
2018/02/08 PHP
Laravel6.2中用于用户登录的新密码确认流程详解
2019/10/16 PHP
javascript 定义新对象方法
2010/02/20 Javascript
JS Replace 全部替换字符的用法小结
2013/12/24 Javascript
jquery自动填充勾选框即把勾选框打上true
2014/03/24 Javascript
jquery实现的一个简单进度条效果实例
2014/05/12 Javascript
JavaScript遍历table表格中的某行某列并打印其值
2014/07/08 Javascript
Backbone.js中的集合详解
2015/01/14 Javascript
超级简单实现JavaScript MVC 样式框架
2015/03/24 Javascript
使用CamanJS在Web页面上处理图像的技巧
2015/08/18 Javascript
prototype.js常用函数详解
2016/06/18 Javascript
移动端刮刮乐的实现方式(js+HTML5)
2017/03/23 Javascript
浅谈 Vue v-model指令的实现原理
2017/06/08 Javascript
Javascript中Promise的四种常用方法总结
2017/07/14 Javascript
JavaScript 中定义函数用 var foo = function () {} 和 function foo()区别介绍
2018/03/01 Javascript
JS扩展String.prototype.format字符串拼接的功能
2018/03/09 Javascript
JS实现的A*寻路算法详解
2018/12/14 Javascript
JavaScript实现切换多张图片
2021/01/27 Javascript
[05:59]2018DOTA2国际邀请赛寻真——只为胜利的Secret
2018/08/13 DOTA
python实现获取客户机上指定文件并传输到服务器的方法
2015/03/16 Python
详解python中 os._exit() 和 sys.exit(), exit(0)和exit(1) 的用法和区别
2017/06/23 Python
Django 如何获取前端发送的头文件详解(推荐)
2017/08/15 Python
python如何通过实例方法名字调用方法
2018/03/21 Python
python接入支付宝的实例操作
2020/07/20 Python
python 用opencv实现霍夫线变换
2020/11/27 Python
使用CSS Grid布局实现网格的流动
2014/12/30 HTML / CSS
css3 transform过渡抖动问题解决
2020/10/23 HTML / CSS
英国剑桥包官网:The Cambridge Satchel Company
2016/08/01 全球购物
Bench加拿大官方网站:英国城市服装品牌
2017/11/03 全球购物
Tostadora意大利:定制T恤
2019/04/08 全球购物
美国乒乓球设备、配件和服装品牌:Killerspin
2020/06/07 全球购物
合作意向书怎么写
2019/06/24 职场文书
创业者如何撰写出一份打动投资人的商业计划书?
2019/07/02 职场文书
Redis 异步机制
2022/05/15 Redis