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 相关文章推荐
经典的带阴影的可拖动的浮动层
Jun 26 Javascript
JavaScript获取某年某月的最后一天附截图
Jun 23 Javascript
今天抽时间给大家整理jquery和ajax的相关知识
Nov 17 Javascript
jquery ztree异步搜索(搜叶子)实践
Feb 25 Javascript
解决Node.js使用MySQL出现connect ECONNREFUSED 127.0.0.1:3306的问题
Mar 09 Javascript
基于vue实现swipe轮播组件实例代码
May 24 Javascript
利用javascript如何随机生成一定位数的密码
Sep 22 Javascript
微信小程序获取手机号授权用户登录功能
Nov 09 Javascript
浅析Node.js非对称加密方法
Jan 29 Javascript
vue 动态绑定背景图片的方法
Aug 10 Javascript
jQuery zTree插件使用简单教程
Aug 16 jQuery
深入理解Antd-Select组件的用法
Feb 25 Javascript
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
ThinkPHP php 框架学习笔记
2009/10/30 PHP
PHP+jQuery 注册模块开发详解
2014/10/14 PHP
php实现PDO中捕获SQL语句错误的方法
2017/02/16 PHP
php微信开发之谷歌测距
2018/06/14 PHP
获取Javscript执行函数名称的方法
2006/12/22 Javascript
javascript Firefox与IE 替换节点的方法
2010/02/24 Javascript
js判断样式className同时增加class或删除class
2013/01/30 Javascript
JQuery 实现在同一页面锚点链接之间的平滑滚动
2014/10/29 Javascript
JavaScript实现输入框(密码框)出现提示语
2016/01/12 Javascript
JS中使用apply方法通过不同数量的参数调用函数的方法
2016/05/31 Javascript
JS实现集合的交集、补集、差集、去重运算示例【ES5与ES6写法】
2019/02/18 Javascript
深入理解es6块级作用域的使用
2019/03/28 Javascript
小程序封装路由文件和路由方法(5种全解析)
2019/05/26 Javascript
nginx部署多个vue项目的方法示例
2020/09/06 Javascript
小程序实现上下切换位置
2020/11/16 Javascript
[01:30:54]《加油DOTA》 第三期
2014/08/18 DOTA
python查看FTP是否能连接成功的方法
2015/07/30 Python
Python模拟用户登录验证
2017/09/11 Python
Python学习之Django的管理界面代码示例
2018/02/10 Python
Python查找两个有序列表中位数的方法【基于归并算法】
2018/04/20 Python
Python 计算任意两向量之间的夹角方法
2019/07/05 Python
Python shutil模块用法实例分析
2019/10/02 Python
Python SSL证书验证问题解决方案
2020/01/13 Python
Python编程快速上手——Excel表格创建乘法表案例分析
2020/02/28 Python
用Python制作mini翻译器的实现示例
2020/08/17 Python
使用phonegap克隆和删除联系人的实现方法
2017/03/31 HTML / CSS
美国最好的保健品打折网店:Swanson
2017/08/04 全球购物
新西兰最大的连锁超市:Countdown
2020/06/04 全球购物
学习雷锋精神心得体会范文
2014/03/12 职场文书
竞选文艺委员演讲稿
2014/04/28 职场文书
社会公德演讲稿
2014/05/20 职场文书
学生违反校规检讨书
2014/10/28 职场文书
成人成长感言如何写?
2019/08/16 职场文书
用Python将库打包发布到pypi
2021/04/13 Python
python中使用 unittest.TestCase单元测试的用例详解
2021/08/30 Python
MySQL 字符集 character
2022/05/04 MySQL