理解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高级程序设计(第3版)学习笔记6 初识js对象
Oct 11 Javascript
获取内联和链接中的样式(js代码)
Apr 11 Javascript
关于jquery css的使用介绍
Apr 18 Javascript
用js判断输入是否为中文的函数
Mar 10 Javascript
js取整数、取余数的方法
May 11 Javascript
js中flexible.js实现淘宝弹性布局方案
Jun 23 Javascript
js 弹出虚拟键盘修改密码的简单实例
Oct 10 Javascript
JQuery异步提交表单与文件上传功能示例
Jan 12 Javascript
在vue项目中使用codemirror插件实现代码编辑器功能
Aug 27 Javascript
js 根据对象数组中的属性进行排序实现代码
Sep 12 Javascript
js get和post请求实现代码解析
Feb 06 Javascript
Vue用mixin合并重复代码的实现
Nov 27 Vue.js
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你的验证码安全码?
2007/01/02 PHP
提高define性能的php扩展hidef的安装和使用
2011/06/14 PHP
解析Ubuntu下crontab命令的用法
2013/06/24 PHP
php实现的九九乘法口诀表简洁版
2014/07/28 PHP
PHP进程同步代码实例
2015/02/12 PHP
Yii框架中jquery表单验证插件用法示例
2016/10/18 PHP
php基于自定义函数记录log日志方法
2017/07/21 PHP
redis+php实现微博(一)注册与登录功能详解
2019/09/23 PHP
javascript算法题 求任意一个1-9位不重复的N位数在该组合中的大小排列序号
2012/07/21 Javascript
了解一点js的Eval函数
2012/07/26 Javascript
学习JavaScript编程语言的8张思维导图分享
2015/03/27 Javascript
windows下更新npm和node的方法
2017/11/30 Javascript
node.js爬取中关村的在线电瓶车信息
2018/11/13 Javascript
使用 JavaScript 创建并下载文件(模拟点击)
2019/10/25 Javascript
VUE子组件向父组件传值详解(含传多值及添加额外参数场景)
2020/09/01 Javascript
vue动态合并单元格并添加小计合计功能示例
2020/11/26 Vue.js
[01:00:54]TI4正赛第二日开场
2014/07/20 DOTA
Python解析json文件相关知识学习
2016/03/01 Python
Python判断中文字符串是否相等的实例
2018/07/06 Python
详解Python网络框架Django和Scrapy安装指南
2019/04/01 Python
python找出一个列表中相同元素的多个索引实例
2019/06/11 Python
Python面向对象之Web静态服务器
2019/09/03 Python
如何理解Python中包的引入
2020/05/29 Python
世界第一冲浪品牌:O’Neill
2016/08/30 全球购物
MIRTA官网:手工包,100%意大利制造
2020/02/11 全球购物
Lookfantastic阿联酋官网:英国知名美妆护肤购物网站
2020/05/26 全球购物
大学辅导员事迹材料
2014/02/05 职场文书
保险专业自荐信范文
2014/02/20 职场文书
班主任新年寄语
2014/04/04 职场文书
电话客服专员岗位职责
2014/06/28 职场文书
民主评议教师党员自我评价
2015/03/04 职场文书
《只有一个地球》教学反思
2016/02/16 职场文书
python实现求纯色彩图像的边框
2021/04/08 Python
如何用PHP实现多线程编程
2021/05/26 PHP
【海涛dota解说】海涛小满开黑4v5被破两路翻盘潮汐第一视角解说
2022/04/01 DOTA
Vite + React从零开始搭建一个开源组件库
2022/06/25 Javascript