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 页面载入进度条实现代码
Feb 08 Javascript
jquery 表格分页等操作实现代码(pagedown,pageup)
Apr 11 Javascript
JS动态增加删除UL节点LI及相关内容示例
May 21 Javascript
JQuery 使用attr方法实现下拉列表选中
Oct 13 Javascript
jQuery中append()方法用法实例
Jan 08 Javascript
利用css+原生js制作简单的钟表
Apr 07 Javascript
详解如何较好的使用js
Dec 16 Javascript
JS仿Base.js实现的继承示例
Apr 07 Javascript
微信小程序实现默认第一个选中变色效果
Jul 17 Javascript
Ant Design Pro 下实现文件下载的实现代码
Dec 03 Javascript
在weex中愉快的使用scss的方法步骤
Jan 02 Javascript
jQuery实现计算器功能
Oct 19 jQuery
微信小程序实现卡片左右滑动效果的示例代码
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 模拟get_headers函数的代码示例
2013/04/27 PHP
php获取淘宝分类id示例
2014/01/16 PHP
PHP APC配置文件2套和参数详解
2014/06/11 PHP
php对象在内存中的存在形式分析
2015/02/03 PHP
php中引用&的用法分析【变量引用,函数引用,对象引用】
2016/12/12 PHP
详解PHP多个进程配合redis的有序集合实现大文件去重
2019/03/06 PHP
javascript之可拖动的iframe效果代码
2008/08/01 Javascript
JavaScript高级程序设计 事件学习笔记
2011/09/10 Javascript
JavaScript中判断对象类型的几种方法总结
2013/11/11 Javascript
解决JQeury显示内容没有边距内容紧挨着浏览器边线
2013/12/20 Javascript
JavaScript字符串对象charAt方法入门实例(用于取得指定位置的字符)
2014/10/17 Javascript
jQuery插件kinMaxShow扩展效果用法实例
2015/05/04 Javascript
javascript的BOM汇总
2015/07/16 Javascript
实例详解JSON数据格式及json格式数据域字符串相互转换
2016/01/07 Javascript
js点击文本框弹出可选择的checkbox复选框
2016/02/03 Javascript
JavaScript中误用/g导致的正则test()无法正确重复执行的解决方案
2016/07/27 Javascript
原生js实现ajax方法(超简单)
2016/09/20 Javascript
探究react-native 源码的图片缓存问题
2017/08/24 Javascript
基于 Immutable.js 实现撤销重做功能的实例代码
2018/03/01 Javascript
详解开发react应用最好用的脚手架 create-react-app
2018/04/24 Javascript
Python实现两个list对应元素相减操作示例
2017/06/09 Python
R语言 vs Python对比:数据分析哪家强?
2017/11/17 Python
基于Python列表解析(列表推导式)
2018/06/23 Python
Numpy中的mask的使用
2018/07/21 Python
django如何连接已存在数据的数据库
2018/08/14 Python
TensorFlow实现打印每一层的输出
2020/01/21 Python
Python基于pip实现离线打包过程详解
2020/05/15 Python
python openpyxl模块的使用详解
2021/02/25 Python
加拿大最大的箱包及旅游配件零售商:Bentley Leathers
2017/07/19 全球购物
TripAdvisor西班牙官方网站:全球领先的旅游网站
2018/01/10 全球购物
家长对学生的评语
2014/04/18 职场文书
党员对照检查材料整改措施思想汇报
2014/09/26 职场文书
城南旧事电影观后感
2015/06/16 职场文书
反四风问题学习心得体会
2016/01/22 职场文书
《秋思》教学反思
2016/02/23 职场文书
html+css 实现简易导航栏功能
2021/04/07 HTML / CSS