老生常谈 关于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 相关文章推荐
javascript跨域的4种方法和原理详解
Apr 08 Javascript
node.js中的console.time方法使用说明
Dec 09 Javascript
Angularjs整合微信UI(weui)
Mar 15 Javascript
js实现select二级联动下拉菜单
Apr 17 Javascript
JavaScript实现审核流程状态的动态显示进度条
Mar 15 Javascript
简单实现jQuery轮播效果
Aug 18 jQuery
js阻止默认右键的下拉菜单方法
Jan 02 Javascript
Vue页面骨架屏注入方法
May 13 Javascript
ElementUI Tag组件实现多标签生成的方法示例
Jul 08 Javascript
axios解决高并发的方法:axios.all()与axios.spread()的操作
Nov 09 Javascript
vuex的数据渲染与修改浅析
Nov 26 Vue.js
微信小程序实现轮播图指示器
Jun 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
php实现水仙花数示例分享
2014/04/03 PHP
php和editplus正则表达式去除空白行
2015/04/17 PHP
php实现爬取和分析知乎用户数据
2016/01/26 PHP
PHP互换两个变量值的方法(不用第三变量)
2016/11/14 PHP
THINKPHP截取中文字符串函数实例代码
2017/03/20 PHP
js几个验证函数代码
2010/03/25 Javascript
jQuery实现随意改变div任意属性的名称和值(部分原生js实现)
2013/05/28 Javascript
js中onload与onunload的使用示例
2013/08/25 Javascript
JavaScript中提前声明变量或函数例子
2014/11/12 Javascript
jQuery中removeData()方法用法实例
2014/12/27 Javascript
JavaScript实现倒计时代码段Item1(非常实用)
2015/11/03 Javascript
浅谈JavaScript 中有关时间对象的方法
2016/08/15 Javascript
微信小程序购物商城系统开发系列-工具篇的介绍
2016/11/21 Javascript
knockoutjs模板实现树形结构列表
2017/07/31 Javascript
详解bootstrap导航栏.nav与.navbar区别
2017/11/23 Javascript
详解webpack打包vue项目之后生成的dist文件该怎么启动运行
2019/09/06 Javascript
详解小程序BackgroundAudioManager踩坑之旅
2019/12/08 Javascript
python单线程实现多个定时器示例
2014/03/30 Python
Python使用shelve模块实现简单数据存储的方法
2015/05/20 Python
Python中元组,列表,字典的区别
2017/05/21 Python
用python统计代码行的示例(包括空行和注释)
2018/07/24 Python
python3 打开外部程序及关闭的示例
2018/11/06 Python
python实现剪切功能
2019/01/23 Python
Python3.5内置模块之time与datetime模块用法实例分析
2019/04/27 Python
Python3匿名函数lambda介绍与使用示例
2019/05/18 Python
python 使用事件对象asyncio.Event来同步协程的操作
2020/05/04 Python
将python字符串转化成长表达式的函数eval实例
2020/05/11 Python
HTML5 创建canvas元素示例代码
2014/06/04 HTML / CSS
日常奢侈品,轻松购物:Verishop
2019/08/20 全球购物
ktv好的活动方案
2014/08/17 职场文书
向国旗敬礼活动总结
2014/09/27 职场文书
学生个人总结范文
2015/02/15 职场文书
教师节主持词开场白
2015/05/29 职场文书
SpringBoot 集成Redis 过程
2021/06/02 Redis
SpringMVC 整合SSM框架详解
2021/08/30 Java/Android
教你使用Jenkins集成Harbor自动发布镜像
2022/04/03 Servers