老生常谈 关于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 非图片动态loading效果实现代码
Apr 09 Javascript
JavaScript使用cookie实现记住账号密码功能
Apr 27 Javascript
JS根据浏览器窗口大小实时动态改变网页文字大小的方法
Feb 25 Javascript
MVC+jQuery.Ajax异步实现增删改查和分页
Dec 22 Javascript
Ajax使用原生态JS验证用户名是否存在
May 26 Javascript
基于casperjs和resemble.js实现一个像素对比服务详解
Jan 10 Javascript
Vue+Mock.js模拟登录和表格的增删改查功能
Jul 26 Javascript
jQuery仿移动端支付宝键盘的实现代码
Aug 15 jQuery
让webpack+vue-cil项目不再自动打开浏览器的方法
Sep 27 Javascript
写一个Vue Popup组件
Feb 25 Javascript
js/jquery遍历对象和数组的方法分析【forEach,map与each方法】
Feb 27 jQuery
Vue基本指令实例图文讲解
Feb 25 Vue.js
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生成图片的缩略图的方法
2015/08/18 PHP
基于Codeigniter框架实现的student信息系统站点动态发布功能详解
2017/03/23 PHP
jQuery拖拽 & 弹出层 介绍与示例
2013/12/27 Javascript
js在数组中删除重复的元素自保留一个(两种实现思路)
2014/08/22 Javascript
node.js中的fs.utimesSync方法使用说明
2014/12/15 Javascript
JavaScript通过select动态更换图片的方法
2015/03/23 Javascript
深入理解jQuery.data() 的实现方式
2016/11/30 Javascript
Javascript中八种遍历方法的执行速度深度对比
2017/04/25 Javascript
layui导航栏实现代码
2017/05/19 Javascript
详解vue 单页应用(spa)前端路由实现原理
2018/04/04 Javascript
vue中post请求以a=a&b=b 的格式写遇到的问题
2018/04/27 Javascript
vue-resource请求实现http登录拦截或者路由拦截的方法
2018/07/11 Javascript
详解小程序原生使用ES7 async/await语法
2018/08/06 Javascript
jQuery访问json文件中数据的方法示例
2019/01/28 jQuery
如何基于js判断浏览器版本
2020/02/20 Javascript
rhythmbox中文名乱码问题解决方法
2008/09/06 Python
Python THREADING模块中的JOIN()方法深入理解
2015/02/18 Python
全面解析Python的While循环语句的使用方法
2015/10/13 Python
python输入错误密码用户锁定实现方法
2017/11/27 Python
Python快速排序算法实例分析
2017/11/29 Python
解决python ogr shp字段写入中文乱码的问题
2018/12/31 Python
OpenCV-Python 摄像头实时检测人脸代码实例
2019/04/30 Python
django框架实现模板中获取request 的各种信息示例
2019/07/01 Python
Django自带用户认证系统使用方法解析
2020/11/12 Python
HTML5 的新的表单元素(datalist/keygen/output)使用介绍
2013/07/19 HTML / CSS
澳大利亚正品化妆品之家:Cosmetic Capital
2017/07/03 全球购物
加拿大在线旅游公司:Flighthub
2019/03/11 全球购物
请描述一下”is a”关系和”has a”关系
2015/02/03 面试题
视光学专业毕业生推荐信
2013/10/28 职场文书
群众路线领导对照材料
2014/08/23 职场文书
学校交通安全责任书
2014/08/25 职场文书
工作证明范本(2篇)
2014/09/14 职场文书
会议简讯范文
2015/07/20 职场文书
php 原生分页
2021/04/01 PHP
C#连接ORACLE出现乱码问题的解决方法
2021/10/05 Oracle
JPA 通过Specification如何实现复杂查询
2021/11/23 Java/Android