老生常谈 关于JavaScript的类的继承


Posted in Javascript onJune 24, 2016

其实最一开始学JS的时候就看过继承的实现。当时只是去试着理解从书上看来的代码段而已。今天又重新思考了一下,感觉这是一个思维探索演进的结果。

继承,即复用。

如果抛开继承的固有思想,让b复用a的成员,最简单粗暴的做法, b=a;

那么,问题来了: 对b的任何改动,就是对a的改动(同一个object嘛)。

好吧,那就拷贝一份,浅拷贝不够安全的话,就用深拷贝。

问题:代码是复用了,但内存浪费了(不管是变量还是方法,在JS中都是对象)。

不拷贝,只读不写,就可以用JS的原型,b.__proto__ = a。一般我们不直接更改__proto__,太暴力了,JS中提供了一个method可以比较“温和”地达到目的——Object.create(b)。

老生常谈 关于JavaScript的类的继承

这个方法可行,但这只是具体对象的复用模式,如果做到“利用ConstructorB创建的对象能复用ConstructorA的对象的原型”呢?

答案是:将b看成是ConstructorB.prototype,将a看成ConstructorA.prototype.

老生常谈 关于JavaScript的类的继承

问题:

老生常谈 关于JavaScript的类的继承

解决方法:

申明ConstructorB的时候,系统自动会让ConstructorB.prototype.constructor=ConstructorB; 在上面代码中为了复用ConstructorA.prototype, 丢掉了constructor, 补上即可。

老生常谈 关于JavaScript的类的继承

以上是最基本的继承,关于子类如何更通用地调用父类的构造函数及成员(如this._super),如何更通用地实现继承模式(如A=inheritFrom(B)),等等,不在本文范围^O^

以上就是小编为大家带来的老生常谈 关于JavaScript的类的继承全部内容了,希望大家多多支持三水点靠木~

Javascript 相关文章推荐
JS控制一个DIV层在指定时间内消失的方法
Feb 17 Javascript
js中直接声明一个对象的方法
Aug 10 Javascript
30个经典的jQuery代码开发技巧
Dec 15 Javascript
Bootstrap源码解读导航(6)
Dec 23 Javascript
基于JavaScript实现移动端无限加载分页
Mar 27 Javascript
Angular2使用Augury来调试Angular2程序
May 21 Javascript
基于vue实现分页效果
Nov 06 Javascript
基于Vue框架vux组件库实现上拉刷新功能
Nov 28 Javascript
javascript 通过键名获取键盘的keyCode方法
Dec 31 Javascript
node中的session的具体使用
Sep 14 Javascript
JavaScript中filter的用法实例分析
Feb 27 Javascript
详解用JS添加和删除class类名
Mar 25 Javascript
js动态获取子复选项并设计全选及提交的实现方法
Jun 24 #Javascript
EasyUI在表单提交之前进行验证的实例代码
Jun 24 #Javascript
正则表达式(语法篇推荐)
Jun 24 #Javascript
javascript弹出窗口中增加确定取消按钮
Jun 24 #Javascript
javascript类型系统_正则表达式RegExp类型详解
Jun 24 #Javascript
JQuery DIV 动态隐藏和显示的方法
Jun 23 #Javascript
微信QQ的二维码登录原理js代码解析
Jun 23 #Javascript
You might like
《Pokemon Sword·Shield》系列WEB动画《薄明之翼》第2话声优阵容公开!
2020/03/06 日漫
PHP 实例化类的一点摘记
2008/03/23 PHP
php使用类继承解决代码重复的问题
2015/02/11 PHP
php+ajax实现无刷新文件上传功能(ajaxuploadfile)
2018/02/11 PHP
js对象关系图 方便dom操作
2012/03/18 Javascript
jquery实现select选中行、列合计示例
2014/04/25 Javascript
js获取url中"?"后面的字串方法
2014/05/15 Javascript
jquery搜索框效果实现方法
2015/01/16 Javascript
Active控件问题小结(附解决办法)
2016/06/09 Javascript
输入法的回车与消息发送快捷键回车的冲突解决方法
2016/08/09 Javascript
微信小程序 加载 app-service.js 错误解决方法
2016/10/12 Javascript
JS实现div模块的截图并下载功能
2017/10/17 Javascript
async/await优雅的错误处理方法总结
2019/01/30 Javascript
vue中动态select的使用方法示例
2019/10/28 Javascript
详解vue中使用axios对同一个接口连续请求导致返回数据混乱的问题
2019/11/06 Javascript
vue element el-transfer增加拖拽功能
2021/01/15 Vue.js
[03:01]2014DOTA2国际邀请赛 DC:我是核弹粉,为Burning和国土祝福
2014/07/13 DOTA
python中的内置函数getattr()介绍及示例
2014/07/20 Python
Python代码的打包与发布详解
2014/07/30 Python
python人人网登录应用实例
2014/09/26 Python
python开发之thread实现布朗运动的方法
2015/11/11 Python
Python实现脚本锁功能(同时只能执行一个脚本)
2017/05/10 Python
不同版本中Python matplotlib.pyplot.draw()界面绘制异常问题的解决
2017/09/24 Python
python 读写中文json的实例详解
2017/10/29 Python
Python中static相关知识小结
2018/01/02 Python
python Dijkstra算法实现最短路径问题的方法
2019/09/19 Python
python getpass实现密文实例详解
2019/09/24 Python
Python.append()与Python.expand()用法详解
2019/12/18 Python
Keras预训练的ImageNet模型实现分类操作
2020/07/07 Python
python PyAUtoGUI库实现自动化控制鼠标键盘
2020/09/09 Python
HTML5的结构和语义(3):语义性的块级元素
2008/10/17 HTML / CSS
Sofmap官网:日本著名的数码电器专卖店
2017/05/19 全球购物
英国领先的豪华时尚家居网上商店:Amara
2019/08/12 全球购物
Linux如何命名文件--使用文件名时应注意
2014/05/29 面试题
人代会标语
2014/06/30 职场文书
中秋节英文祝福语句(14句)
2019/09/11 职场文书