JavaScript类的继承方法小结【组合继承分析】


Posted in Javascript onJuly 11, 2018

本文实例讲述了JavaScript类的继承方法。分享给大家供大家参考,具体如下:

在JavaScript 里,被继承的函数称为超类型(父类,基类也行,其他语言叫法),继承的函数称为子类型(子类,派生类)。继承也有之前问题,比如字面量重写原型会中断关系,使用引用类型的原型,并且子类型还无法给超类型传递参数。

为了解决引用共享和超类型无法传参的问题,我们采用一种叫借用构造函数的技术,或者成为对象冒充(伪造对象、经典继承)的技术来解决这两种问题。

function aObj(){
  this.name = ['小红','小强'];
  }
}
aObj.prototype.showname = ()=>{
  alert(this.name)
}
function bObj(){
  aObj.call(this); //只针对构造函数本身的继承 还需要继承原型
}

借用构造函数虽然解决了函数本身的继承,但没有继承原型链。所以,我们需要原型链+借用构造函数的模式,这种模式称为组合继承。

方法一:

bObj.prototype = aObj.prototype;

缺点:引用类型,在操作对象原型时候,直接改变堆内存中对象的方法

方法二:

bObj.prototype = new aObj();

这种继承借助原型并基于已有的对象创建新对象,同时还不必因此创建自定义类型,但是构造函数两次继承,不是很好

方法三:

bObj.prototype = Object.create(aObj.prototype);
bObj.prototype.constructor = bObj

使用a原型对象及其属性去创建一个新的对象,并将这个对象的constructor指向B函数本身,不存在重复继承的问题

方法四:

for (var i in aObj.prototype) {
  bObj.prototype[i] = aObj.prototype[i];
}

将a的原型链遍历给b对象,实现原型的深度拷贝,双方互不影响

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

Javascript 相关文章推荐
javascript实现仿银行密码输入框效果的代码
Dec 13 Javascript
深入理解javascript中return的作用
Dec 30 Javascript
jQuery实现下拉菜单(内容为时间)的实时更新及图表的随动更新的方法
Jul 07 Javascript
jquery实现图片平滑滚动详解
Mar 22 jQuery
BootStrap Select清除选中的状态恢复默认状态
Jun 20 Javascript
React-Native实现ListView组件之上拉刷新实例(iOS和Android通用)
Jul 11 Javascript
Vue如何从1.0迁移到2.0
Oct 19 Javascript
详解Vue源码学习之callHook钩子函数
Jul 25 Javascript
React Native开发封装Toast与加载Loading组件示例
Sep 08 Javascript
ES6 Object方法扩展的应用实例分析
Jun 25 Javascript
微信小程序使用echarts获取数据并生成折线图
Oct 16 Javascript
vue3+typeScript穿梭框的实现示例
Dec 29 Vue.js
React中嵌套组件与被嵌套组件的通信过程
Jul 11 #Javascript
JSON数据中存在单个转义字符“\”的处理方法
Jul 11 #Javascript
JS实现动态生成html table表格的方法分析
Jul 11 #Javascript
vue监听键盘事件的快捷方法【推荐】
Jul 11 #Javascript
vue移动端实现红包雨效果
Jun 23 #Javascript
vue实现学生录入系统之添加删除功能
Jul 11 #Javascript
微信小程序实现红包雨功能
Jul 11 #Javascript
You might like
十天学会php之第一天
2006/10/09 PHP
精美漂亮的php分页类代码
2013/04/02 PHP
PHP+jQuery 注册模块的改进(一):验证码存入SESSION
2014/10/14 PHP
php读取目录及子目录下所有文件名的方法
2014/10/20 PHP
PHP代码判断设备是手机还是平板电脑(两种方法)
2015/10/19 PHP
Laravel中注册Facades的步骤详解
2016/03/16 PHP
Laravel 5.4重新登录实现跳转到登录前页面的原理和方法
2017/07/13 PHP
PHP实现webshell扫描文件木马的方法
2017/07/31 PHP
jquery选择器的选择使用及性能介绍
2013/01/16 Javascript
jQuery图片滚动图片的效果(另类实现)
2013/06/02 Javascript
js获取当前时间显示在页面上并每秒刷新
2014/12/24 Javascript
JQuery跳出each循环的方法
2015/04/16 Javascript
JavaScript脚本库编写的方法
2015/12/09 Javascript
jQuery使用$.ajax进行即时验证实例详解
2015/12/11 Javascript
JS实时弹出新消息提示框并有提示音响起的实现代码
2016/04/20 Javascript
NodeJS自定义模块写法(详解)
2017/06/27 NodeJs
vue使用Google地图的实现示例代码
2018/12/19 Javascript
js canvas实现橡皮擦效果
2018/12/20 Javascript
微信小程序实现炫酷的弹出式菜单特效
2019/01/28 Javascript
layui实现根据table数据判断按钮显示情况的方法
2019/09/26 Javascript
详解React 条件渲染
2020/07/08 Javascript
[01:32]完美世界DOTA2联赛10月29日精彩集锦
2020/10/30 DOTA
Python入门及进阶笔记 Python 内置函数小结
2014/08/09 Python
Python使用urllib2模块抓取HTML页面资源的实例分享
2016/05/03 Python
Python实现的微信红包提醒功能示例
2019/08/22 Python
sqlalchemy实现时间列自动更新教程
2020/09/02 Python
python实现图像高斯金字塔的示例代码
2020/12/11 Python
BIBLOO波兰:捷克的一家在线服装店
2018/03/09 全球购物
博士生入学考试推荐信
2013/11/17 职场文书
毕业证丢失证明
2014/01/15 职场文书
课改先进个人汇报材料
2014/01/26 职场文书
销售会计岗位职责
2014/03/15 职场文书
党的群众路线教育实践活动总结报告
2014/04/28 职场文书
2014迎国庆标语大全
2014/09/19 职场文书
《狮子和鹿》教学反思
2016/02/16 职场文书
奥特曼十大神器:奥特手镯在榜,第一是贝利亚的神器
2022/03/18 日漫