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 相关文章推荐
使用jQuery和PHP实现类似360功能开关效果
Feb 12 Javascript
js星星评分效果
Jul 24 Javascript
Javascript变量的作用域和作用域链详解
Apr 02 Javascript
JavaScript中的getTimezoneOffset()方法使用详解
Jun 10 Javascript
关于function类中定义变量this的简单说明
May 28 Javascript
浅谈Sublime Text 3运行JavaScript控制台
Jun 06 Javascript
使用jQuery 操作table 完成单元格合并的实例
Dec 27 jQuery
基于node下的http小爬虫的示例代码
Jan 11 Javascript
vue axios 在页面切换时中断请求方法 ajax
Mar 05 Javascript
原生JS实现留言板功能
Feb 08 Javascript
js将URL网址转为16进制加密与解密函数
Mar 04 Javascript
javascript-hashchange事件和历史状态管理实例分析
Apr 18 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的PSR规范中文版
2013/09/28 PHP
单点登录 Ucenter示例分析
2013/10/29 PHP
php顺序查找和二分查找示例
2014/03/27 PHP
destoon实现不同会员组公司名称显示不同的颜色的方法
2014/08/22 PHP
PHP 网站修改默认访问文件的nginx配置
2017/05/27 PHP
thinkphp中U方法按路由规则生成url的方法
2018/03/12 PHP
jquery 图片 上一张 下一张 链接效果(续篇)
2010/04/20 Javascript
悄悄用脚本检查你访问过哪些网站的代码
2010/12/04 Javascript
jQuery通过控制节点实现仅在前台通过get方法完成参数传递
2015/02/02 Javascript
js实现顶部可折叠的菜单工具栏效果实例
2015/05/09 Javascript
实例讲解jquery与json的结合
2016/01/07 Javascript
javascript匀速动画和缓冲动画详解
2016/10/20 Javascript
javascript中可能用得到的全部的排序算法
2020/03/05 Javascript
vue实现购物车案例
2020/05/30 Javascript
javascript实现点击按钮切换轮播图功能
2020/09/23 Javascript
在vue中获取wangeditor的html和text的操作
2020/10/23 Javascript
Python中函数的用法实例教程
2014/09/08 Python
python使用nntp读取新闻组内容的方法
2015/05/08 Python
Python中运算符"=="和"is"的详解
2016/10/08 Python
python安装教程 Pycharm安装详细教程
2017/05/02 Python
Python微信库:itchat的用法详解
2017/08/14 Python
Python KMeans聚类问题分析
2018/02/23 Python
浅谈Python Opencv中gamma变换的使用详解
2018/04/02 Python
django 外键model的互相读取方法
2018/12/15 Python
python networkx 根据图的权重画图实现
2019/07/10 Python
Python GUI编程学习笔记之tkinter中messagebox、filedialog控件用法详解
2020/03/30 Python
Windows+Anaconda3+PyTorch+PyCharm的安装教程图文详解
2020/04/03 Python
如何在Windows中安装多个python解释器
2020/06/16 Python
tensorflow 动态获取 BatchSzie 的大小实例
2020/06/30 Python
学生如何注册Pycharm专业版以及pycharm的安装
2020/09/24 Python
聪明的粉丝购买门票的地方:TickPick
2018/03/09 全球购物
师范大学应届生求职信
2013/11/21 职场文书
优秀的自荐信要注意哪些
2014/01/03 职场文书
信仰心得体会
2014/09/05 职场文书
学生上课看漫画的检讨书
2014/09/26 职场文书
Python实现学生管理系统并生成exe可执行文件详解流程
2022/01/22 Python