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的单例模式 (singleton in Javascript)
Jun 11 Javascript
jQuery实现单行文字间歇向上滚动源代码
Jun 02 Javascript
javascript打印输出json实例
Nov 11 Javascript
javascript自动生成包含数字与字符的随机字符串
Feb 09 Javascript
JS实现隐藏同级元素后只显示JS文件内容的方法
Sep 04 Javascript
用Vue.js实现监听属性的变化
Nov 17 Javascript
理解javascript中的Function.prototype.bind的方法
Feb 03 Javascript
javascript表达式和运算符详解
Feb 07 Javascript
Bootstrap缩略图与警告框学习使用
Feb 08 Javascript
JavaScript基本语法_动力节点Java学院整理
Jun 26 Javascript
微信小程序使用swiper组件实现类3D轮播图
Aug 29 Javascript
使用layui实现树形结构的方法
Sep 20 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实现采集程序原理和简单示例代码
2007/03/18 PHP
php echo()和print()、require()和include()函数区别说明
2010/03/27 PHP
php下网站防IP攻击代码,超级实用
2010/10/24 PHP
PHP+MySQL删除操作实例
2015/01/21 PHP
PHP MSSQL 分页实例
2016/04/13 PHP
PHP简单实现文本计数器的方法
2016/04/28 PHP
php + nginx项目中的权限详解
2017/05/23 PHP
PHP中in_array的隐式转换的解决方法
2018/03/06 PHP
laravel框架学习笔记之组件化开发实现方法
2020/02/01 PHP
Aster vs Newbee BO5 第一场2.19
2021/03/10 DOTA
jQuery文本框(input textare)事件绑定方法教程
2013/04/24 Javascript
php is_numberic函数造成的SQL注入漏洞
2014/03/10 Javascript
jquery比较简洁的软键盘特效实现方法
2015/03/19 Javascript
nodejs中安装ghost出错的原因及解决方法
2017/10/23 NodeJs
小程序自定义组件实现城市选择功能
2018/07/18 Javascript
微信小程序使用echarts获取数据并生成折线图
2019/10/16 Javascript
在微信小程序中使用mqtt服务的方法
2019/12/13 Javascript
微信小程序基于movable-view实现滑动删除效果
2020/01/08 Javascript
vuex中store存储store.commit和store.dispatch的用法
2020/07/24 Javascript
Python下Fabric的简单部署方法
2015/07/14 Python
Python查找最长不包含重复字符的子字符串算法示例
2019/02/13 Python
用django-allauth实现第三方登录的示例代码
2019/06/24 Python
执行Python程序时模块报错问题
2020/03/26 Python
基于django 的orm中非主键自增的实现方式
2020/05/18 Python
如何使用python自带IDLE的几种方法
2020/10/10 Python
three.js模拟实现太阳系行星体系功能
2019/09/03 HTML / CSS
Dr.Jart+美国官网:韩国药妆品牌
2019/01/18 全球购物
SheIn沙特阿拉伯:女装在线
2020/03/23 全球购物
初中生学习生活的自我评价
2013/11/20 职场文书
简历上的自我评价怎么写
2014/01/28 职场文书
走群众路线学习心得体会
2014/10/31 职场文书
团代会闭幕词
2015/01/28 职场文书
幼儿园园长安全责任书
2015/05/08 职场文书
2015年城管执法工作总结
2015/07/23 职场文书
大学生党课感想
2015/08/11 职场文书
JavaScript中document.activeELement焦点元素介绍
2021/11/27 Javascript