理解JavaScript原型链


Posted in Javascript onOctober 25, 2016

每一个JavaScript对象都和另一个对象相关联,相关联的这个对象就是我们所说的“原型”。每一个对象都会从原型继承属性和方法。有一个特殊的对象没有原型,就是Object。在之后的图示中会进行说明。

举个栗子,我们首先声明一个函数Student():

function Student(name){
  this.name = name;
 this.hello = function(){
   alert(`Hello,${this.name}`);
 }
 }

这个函数包含一个属性name和一个方法hello。
在JavaScript中,可以通过new关键字来调用Student函数(不写new就是一个普通函数,写new就是一个构造函数),并且返回一个原型指向Student.prototype的对象,如下所示:

var xiaoming = new Student("xiaoming");
 alert(xiaoming.name); // xiaoming
 xiaoming.hello(); // Hello,xiaoming

如果我们想确认一下我们的设想对不对,就会希望去比较一下xiaoming.prototype和Student.prototype是否相等。
但是xiaoming没有prototype属性,不过可以用__proto__来查看。接下来我们就用这些属性来查看xiaoming,Student,Object之间的原型链:

document.onreadystatechange = function(){
 // interactive表示文档已被解析,但浏览器还在加载其中链接的资源
 if(document.readyState === "interactive"){
  var xiaoming = new Student("xiaoming");
  alert(xiaoming.name);
  xiaoming.hello();
  console.log("xiaoming.__proto__:");
  console.log(xiaoming.__proto__);
  console.log("Student.prototype:");
  console.log(Student.prototype);
  console.log("xiaoming.__proto__ === Student.prototype:" + xiaoming.__proto__ === Student.prototype);
  console.log("Student.prototype.constructor:" + Student.prototype.constructor);
  console.log("Student.prototype.prototype:" + Student.prototype.prototype);
  console.log("Student.prototype.__proto__:");
  console.log(Student.prototype.__proto__);
  console.log(Object.prototype);
  console.log("Student.prototype.__proto__ === Object.prototype:" + Student.prototype.__proto__ === Object.prototype);
 }
}

理解JavaScript原型链

七个红色箭头指向的就是七个console.log语句的输出结果。用图例展示一下如图所示:

理解JavaScript原型链

测试表明Object.prototype和Student.prototype.__proto__指向的Object并不是同一个。这个Object就是之前说的没有原型的那个Object,我们可以看到它并没有对应的prototype或者__proto__属性:

理解JavaScript原型链

由图可得原型链如下所示:

理解JavaScript原型链

由于本人语言表达能力有限,理解也比较浅显,所以图示比较多,错误之处还望指出,谢谢。

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持三水点靠木。

Javascript 相关文章推荐
JavaScript中两种链式调用实现代码
Jan 12 Javascript
判断多个input type=file是否有已经选择好文件的代码
May 23 Javascript
form表单action提交的js部分与html部分
Jan 07 Javascript
jQuery实现感应鼠标动画效果自动伸长的输入框实例
Feb 24 Javascript
javascript实现复选框选中属性
Mar 25 Javascript
学习使用bootstrap基本控件(table、form、button)
Apr 12 Javascript
js动态获取子复选项并设计全选及提交的实现方法
Jun 24 Javascript
详解微信小程序开发之——wx.showToast(OBJECT)的使用
Jan 18 Javascript
canvas绘制环形进度条
Feb 23 Javascript
jQuery实现radio第一次点击选中第二次点击取消功能
May 15 jQuery
ES6学习教程之Map的常用方法总结
Aug 03 Javascript
微信小程序实现点击按钮后修改颜色
Dec 05 Javascript
Ztree新增角色和编辑角色回显问题的解决
Oct 25 #Javascript
jQuery+json实现动态创建复杂表格table的方法
Oct 25 #Javascript
jQuery实现的小图列表,大图展示效果幻灯片示例
Oct 25 #Javascript
JavaScript prototype属性详解
Oct 25 #Javascript
对Angular.js Controller如何进行单元测试
Oct 25 #Javascript
jstree创建无限分级树的方法【基于ajax动态创建子节点】
Oct 25 #Javascript
input file上传 图片预览功能实例代码
Oct 25 #Javascript
You might like
php 需要掌握的东西 不做浮躁的人
2009/12/28 PHP
五款常用mysql slow log分析工具的比较分析
2011/05/22 PHP
PHP 将dataurl转成图片image方法总结
2016/10/14 PHP
PHP面向对象之领域模型+数据映射器实例(分析)
2017/06/21 PHP
Nigma vs Alliance BO5 第一场2.14
2021/03/10 DOTA
formvalidator验证插件中有关ajax验证问题
2013/01/04 Javascript
jQuery中add()方法用法实例
2015/01/08 Javascript
js+css简单实现网页换肤效果
2015/12/29 Javascript
jQuery处理XML文件的几种方法
2016/06/14 Javascript
jQuery实现的背景颜色渐变动画效果示例
2017/03/24 jQuery
javascript实现数字配对游戏的实例讲解
2017/12/14 Javascript
微信小程序实现滴滴导航tab切换效果
2018/07/24 Javascript
原生JS实现轮播图效果
2018/10/12 Javascript
Electron-vue脚手架改造vue项目的方法
2018/10/22 Javascript
vue cli使用融云实现聊天功能的实例代码
2019/04/19 Javascript
一文搞懂ES6中的Map和Set
2019/05/20 Javascript
vue封装可复用组件confirm,并绑定在vue原型上的示例
2019/10/31 Javascript
AJAX XMLHttpRequest对象创建使用详解
2020/08/20 Javascript
element-ui点击查看大图的方法示例
2020/12/14 Javascript
[02:51]DOTA2英雄基础教程 艾欧
2014/01/13 DOTA
[50:27]OG vs LGD 2018国际邀请赛淘汰赛BO3 第一场 8.26
2018/08/30 DOTA
Python读取一个目录下所有目录和文件的方法
2016/07/15 Python
python tensorflow基于cnn实现手写数字识别
2018/01/01 Python
pandas求两个表格不相交的集合方法
2018/12/08 Python
python可以用哪些数据库
2020/06/22 Python
通过Python实现Payload分离免杀过程详解
2020/07/13 Python
Pycharm操作Git及GitHub的步骤详解
2020/10/27 Python
英国在线定制百叶窗网站:Swift Direct Blinds
2020/02/25 全球购物
男女钓鱼靴和甲板鞋:XTRATUF
2021/01/09 全球购物
世界上最大的铁人三项商店:Tri UK
2020/11/04 全球购物
小学生自我评价范文
2014/01/25 职场文书
优秀护士事迹材料
2014/12/25 职场文书
初中政教处工作总结
2015/08/12 职场文书
先进个人主要事迹怎么写
2015/11/04 职场文书
2016年教师师德师风承诺书
2016/03/25 职场文书
应届毕业生的自我评价
2019/06/21 职场文书