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 相关文章推荐
jquery ajax 检测用户注册时用户名是否存在
Nov 03 Javascript
jquery 双色表格实现代码
Dec 08 Javascript
jquery事件机制扩展插件 jquery鼠标右键事件
Dec 21 Javascript
利用js实现选项卡的特别效果的实例
Mar 03 Javascript
在JavaScript里嵌入大量字符串常量的实现方法
Jul 07 Javascript
js网页实时倒计时精确到秒级
Feb 10 Javascript
JS限定手机版中图片大小随分辨率自动调整的方法
Dec 05 Javascript
原生JS实现在线问卷调查投票特效
Jan 03 Javascript
Javascript之深入浅出prototype
Feb 06 Javascript
详解Vue.js 2.0 如何使用axios
Apr 21 Javascript
微信小程序中hidden不生效原因的解决办法
Apr 26 Javascript
vue循环数组改变点击文字的颜色
Oct 14 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中创建和验证哈希的简单方法实探
2015/07/06 PHP
jQuery中创建实例与原型继承揭秘
2011/12/21 Javascript
Extjs优化(一)删除冗余代码提高运行速度
2013/04/15 Javascript
jQuery选择器源码解读(四):tokenize方法的Expr.preFilter
2015/03/31 Javascript
基于JavaScript实现一定时间后去执行一个函数
2015/12/14 Javascript
基于jquery实现百度新闻导航菜单滑动动画
2016/03/15 Javascript
javascript函数中的3个高级技巧
2016/09/22 Javascript
微信小程序 增、删、改、查操作实例详解
2017/01/13 Javascript
javascript事件的绑定基础实例讲解(34)
2017/02/14 Javascript
AngularJS 教程及实例代码
2017/10/23 Javascript
浅谈gulp创建完整的项目流程
2017/12/20 Javascript
jQuery AJAX 方法success()后台传来的4种数据详解
2018/08/08 jQuery
vue ssr 实现方式(学习笔记)
2019/01/18 Javascript
vue日历/日程提醒/html5本地缓存功能
2019/09/02 Javascript
使用Angular9和TypeScript开发RPG游戏的方法
2020/03/25 Javascript
[01:59]DOTA2首部纪录片《Free to play》预告片
2014/03/12 DOTA
[04:27]2014DOTA2国际邀请赛 NAVI战队官方纪录片
2014/07/21 DOTA
python实现的守护进程(Daemon)用法实例
2015/06/02 Python
Python中使用urllib2模块编写爬虫的简单上手示例
2016/01/20 Python
Python 处理数据的实例详解
2017/08/10 Python
python:pandas合并csv文件的方法(图书数据集成)
2018/04/12 Python
python版本单链表实现代码
2018/09/28 Python
Django中使用haystack+whoosh实现搜索功能
2019/10/08 Python
主题酒店策划书
2014/01/28 职场文书
大学生励志演讲稿
2014/04/25 职场文书
诉前财产保全担保书
2014/05/20 职场文书
会计专业自荐信
2014/06/03 职场文书
建设办主任四风问题整改思路和措施
2014/09/20 职场文书
人才市场接收函
2015/01/30 职场文书
教师个人年度总结
2015/02/11 职场文书
护士自我推荐信范文
2015/03/24 职场文书
2015年端午节活动策划书
2015/05/05 职场文书
小学体育教学随笔
2015/08/14 职场文书
2015年物业公司保洁工作总结
2015/10/22 职场文书
MySQL 执行数据库更新update操作的时候数据库卡死了
2022/05/02 MySQL
python数据分析之单因素分析线性拟合及地理编码
2022/06/25 Python