javascript原型链学习记录之继承实现方式分析


Posted in Javascript onMay 01, 2019

本文实例讲述了javascript原型链学习记录之继承实现方式。分享给大家供大家参考,具体如下:

在慕课网学习继承的笔记:

继承的几种方式:

① 使用构造函数实现继承

function Parent(){
  this.name = 'parent';
}
function Child(){
Parent.call(this); //在子类函数体里面执行父类的构造函数
this.type = 'child';//子类自己的属性
}

Parent.call(this),this即实例,使用this执行Parent方法,那么就用this.name = 'parent'把属性

挂载在了this(实例)上面,以此实现了继承。

缺点:以上只是让Child得到了Parent上的属性,Parent的原型链上的属性并未被继承。

② 使用原型链实现继承

function Parent(){
  this.name = 'parent';
}
function Child(){
  this.type = 'child';
}
Child.prototype = new Parent();

解释:Child.prototype === Chlid实例的__proto__ === Child实例的原型

所以当我们引用new Child().name时,Child上没有,然后寻找Child的原型child.__proto__Child.prototypenew Parent(),Parent的实例上就有name属性,所以Child实例就在原型链上找到了name属性,以此实现了继承。

缺点:可以看出,Child的所有实例,它们的原型都是同一个,即Parent的实例:

var a = new Child();
var b = new Child();
a.__proto === b.__proto__; //true

所以,当使用 a.name = 'a'重新给name赋值时,b.name也变成了'a',反之亦然。

用instanceof和constructor都无法确认实例到底是Child的还是Parent的。

③ 结合前两种取长补短

function Parent(){
  this.name = 'parent';
}
function Child(){
  Parent.call(this);
  this.type = 'child';
}
Child.prototype = new Parent();

缺点:在Child()里面用Parent.call(this);执行了一次Parent(),然后又使用Child.prototype = new Parent()执行了一次Parent()。

改进1:

function Parent(){
  this.name = 'parent';
}
function Child(){
  Parent.call(this);
  this.type = 'child';
}
Child.prototype = Parent.prototype;

缺点:用instanceof和constructor都无法确认实例到底是Child的还是Parent的。

原因: Child.prototype = Parent.prototype直接从Parent.prototype里面拿到constructor,即Parent。

改进2:

function Parent(){
  this.name = 'parent';
}
function Child(){
  Parent.call(this);
  this.type = 'child';
}
Child.prototype = Object.create(Parent.prototype);
Child.prototype.constructor = Child;

画图说明吧:

var a = new Child();

javascript原型链学习记录之继承实现方式分析

所以这样写我们就构造出了原型链。

更多关于JavaScript相关内容还可查看本站专题:《javascript面向对象入门教程》、《JavaScript错误与调试技巧总结》、《JavaScript数据结构与算法技巧总结》、《JavaScript遍历算法与技巧总结》及《JavaScript数学运算用法总结》

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

Javascript 相关文章推荐
JavaScript事件列表解说
Dec 22 Javascript
转自Jquery官方 jQuery1.1.3发布,速度提升800%,体积保持20K
Aug 19 Javascript
JavaScript 拖拉缩放效果
Dec 10 Javascript
JavaScript 直接操作本地文件的实现代码
Dec 01 Javascript
浅谈类似于(function(){}).call()的js语句
Mar 30 Javascript
jQuery添加options点击事件并传值实例代码
May 18 Javascript
用JavaScript动态建立或增加CSS样式表的实现方法
May 20 Javascript
ES6中的数组扩展方法
Aug 26 Javascript
JavaScript中定时控制Throttle、Debounce和Immediate详解
Nov 17 Javascript
angular中ui calendar的一些使用心得(推荐)
Nov 03 Javascript
解决webpack dev-server不能匹配post请求的问题
Aug 24 Javascript
angularJs使用ng-repeat遍历后选中某一个的方法
Sep 30 Javascript
微信小程序实现卡片左右滑动效果的示例代码
May 01 #Javascript
微信小程序常见页面跳转操作简单示例
May 01 #Javascript
浅谈对于react-thunk中间件的简单理解
May 01 #Javascript
vue增加强缓存和版本号的实现方法
May 01 #Javascript
vue组件化中slot的基本使用方法
May 01 #Javascript
Vue基本使用之对象提供的属性功能
Apr 30 #Javascript
原生JS实现随机点名项目的实例代码
Apr 30 #Javascript
You might like
php 中include()与require()的对比
2006/10/09 PHP
windows下zendframework项目环境搭建(通过命令行配置)
2012/12/06 PHP
PHPCMS V9 添加二级导航的思路详解
2016/10/20 PHP
PHP如何实现订单的延时处理详解
2017/12/30 PHP
PHP实现的多维数组排序算法分析
2018/02/10 PHP
juqery 学习之三 选择器 层级 基本
2010/11/25 Javascript
JavaScript格式化数字的函数代码
2010/11/30 Javascript
JS保留两位小数 四舍五入函数的小例子
2013/11/20 Javascript
推荐8款jQuery轻量级树形Tree插件
2014/11/12 Javascript
js获取json元素数量的方法
2015/01/27 Javascript
javascript操作select元素实例分析
2015/03/27 Javascript
jquery.uploadifive插件怎么解决上传限制图片或文件大小问题
2017/05/08 jQuery
基于node.js制作简单爬虫教程
2017/06/29 Javascript
基于jQuery对象和DOM对象和字符串之间的转化实例
2017/08/08 jQuery
Mongoose实现虚拟字段查询的方法详解
2017/08/15 Javascript
详解Vue路由History mode模式中页面无法渲染的原因及解决
2017/09/28 Javascript
Vue element-ui父组件控制子组件的表单校验操作
2020/07/17 Javascript
Python常用列表数据结构小结
2014/08/06 Python
python基于隐马尔可夫模型实现中文拼音输入
2016/04/01 Python
浅谈python中的实例方法、类方法和静态方法
2017/02/17 Python
Python3使用turtle绘制超立方体图形示例
2018/06/19 Python
Python多线程应用于自动化测试操作示例
2018/12/06 Python
多版本python的pip 升级后, pip2 pip3 与python版本失配解决方法
2019/09/11 Python
pytorch 实现将自己的图片数据处理成可以训练的图片类型
2020/01/08 Python
python扫描线填充算法详解
2020/02/19 Python
CSS3 实现的加载动画
2020/12/07 HTML / CSS
钉钉企业内部H5微应用开发详解
2020/05/12 HTML / CSS
以设计师精品品质提供快速时尚:PopJulia
2018/01/09 全球购物
应届优秀本科大学毕业生自我鉴定
2014/01/21 职场文书
税务会计岗位职责
2014/02/18 职场文书
高一新生军训感言
2014/03/02 职场文书
市场营销工作计划书
2014/05/06 职场文书
2015年世界无烟日演讲稿
2015/03/18 职场文书
工地材料员岗位职责
2015/04/11 职场文书
复活读书笔记
2015/06/29 职场文书
2015年文秘个人工作总结
2015/10/14 职场文书