五句话帮你轻松搞定js原型链


Posted in Javascript onDecember 09, 2020

原型链是一种机制,指的是JavaScript每个对象包括原型对象都有一个内置的[[proto]]属性指向创建它的函数对象的原型对象,即prototype属性。 作用:原型链的存在,主要是为了实现对象的继承。

一、 记住以下5句话,轻松搞定js原型链

  • Function 和 Object 都是构造函数
  • 所有的构造函数都是Function new出来的(Function自己new了自己);所有的原型对象都是Object new出来的(Object new了自己的原型对象)
  • 每一个构造函数都有一个prototype属性指向其原型对象;每一个实例对象都有一个_ _ proto _ _ 属性;实例对象的_ _ proto _ _ 等于其构造函数的prototype
  • 每一个原型对象都有一个天生属性constructor,指向其对应的构造函数
  • 底层规定Object.prototype._ _ proto _ _ 等于null

二、下边我们结合一小段代码来详细说明原型链的画图过程

function Game(brand,name,price) {
  this.price= price;
  this.brand = brand;
  this.name = name;
 }
 var g1 = new Game('EA','彩虹六号','200rmb');

1.根据上边的代码我们先定义了一个构造函数叫做Game,假设Game在堆内存中的地址为0x100;并通过它new出了一个实例对象g1,g1在堆内存中的地址为0x200。构造函数Game有天生属性prototype,并指向其原型对象(在堆内存中的地址为0x300)),实例对象g1具有天生属性_ _ proto _ _ ,并指向其构造函数的原型对象;原型对象具有天生属性constructor指向其对应的构造函数。然后我们得到如下图:

五句话帮你轻松搞定js原型链

2.由于所有的原型对象都是Object(0x400) new 出来的,所以0x300这个原型对象同时也是Object的一个实例对象,既然是实例对象就具有天生属性_ _ proto _ _ ,并指向其构造函数的原型对象(0x500);因为Object自身也是一个构造函数,所以其也有天生属性prototype,并指向其原型对象(0x500);又因为所有的原型对象都是Object(0x400) new 出来的,所以0x500这个原型对象也是Object new出来的,因为0x500是Object的原型对象,所以0x500的天生属性constructor指向Object;由于底层规定Object.prototype._ _ proto _ _ 等于null,然后我们得到如下图:

五句话帮你轻松搞定js原型链3.

我们再来看构造函数,由于所有的构造函数都是Function new出来的,所以Function(0x600) new出了自己、Object、Game这三个构造函数,那么这三个构造函数都是Function的实例对象,它们的_ _ proto _ _ 都指向Function的prototype(0x700),0x700的天生属性constructor又指向0x600;由于0x700是Object new 出来的,所以0x700的_ _ proto _ _ 指向Object 的原型对象0x500,最终我们得到如下终极原型链图:

五句话帮你轻松搞定js原型链

到此这篇关于js原型链的文章就介绍到这了,更多相关js原型链内容请搜索三水点靠木以前的文章或继续浏览下面的相关文章希望大家以后多多支持三水点靠木!

Javascript 相关文章推荐
静态页面下用javascript操作ACCESS数据库(读增改删)的代码
May 14 Javascript
情人节专属 纯js脚本1k大小的3D玫瑰效果
Feb 11 Javascript
浅析JavaScript中两种类型的全局对象/函数
Dec 05 Javascript
jQuery的选择器中的通配符使用介绍
Mar 20 Javascript
JavaScript实现节点的删除与序号重建实例
Aug 05 Javascript
javascript实现抽奖程序的简单实例
Jun 07 Javascript
微信小程序 生命周期详解
Oct 12 Javascript
Bootstrap的Carousel配合dropload.js实现移动端滑动切换图片
Mar 10 Javascript
JS中SetTimeout和SetInterval使用初探
Mar 23 Javascript
Popup弹出框添加数据实现方法
Oct 27 Javascript
AngularJs ng-change事件/指令的用法小结
Nov 01 Javascript
Vue项目vscode 安装eslint插件的方法(代码自动修复)
Apr 15 Javascript
JS常用跨域方法实现原理解析
Dec 09 #Javascript
video.js添加自定义组件的方法
Dec 09 #Javascript
手把手教你如何编译打包video.js
Dec 09 #Javascript
ES6 十大特性简介
Dec 09 #Javascript
Js实现粘贴上传图片的原理及示例
Dec 09 #Javascript
再也不怕 JavaScript 报错了,怎么看怎么处理都在这儿
Dec 09 #Javascript
使用typescript快速开发一个cli的实现示例
Dec 09 #Javascript
You might like
第十三节 对象串行化 [13]
2006/10/09 PHP
使用MaxMind 根据IP地址对访问者定位
2006/10/09 PHP
让你的WINDOWS同时支持MYSQL4,MYSQL4.1,MYSQL5X
2006/12/06 PHP
php中计算时间差的几种方法
2009/12/31 PHP
浅析get与post的一些特殊情况
2014/07/28 PHP
浅谈php和.net的区别
2014/09/28 PHP
javascript 获取表单file全路径
2009/12/31 Javascript
IE和Firefox的Javascript兼容性总结[推荐收藏]
2011/10/19 Javascript
jquery实现手机发送验证码的倒计时代码
2014/02/12 Javascript
js实现新年倒计时效果
2015/12/10 Javascript
wap手机端解决返回上一页的js实例
2016/12/08 Javascript
JS设置CSS样式的方式汇总
2017/01/21 Javascript
Node.js+ES6+dropload.js实现移动端下拉加载实例
2017/06/01 Javascript
获取本机IP地址的实例(JavaScript / Node.js)
2017/11/24 Javascript
React实现全局组件的Toast轻提示效果
2018/09/21 Javascript
vue中如何去掉空格的方法实现
2018/11/09 Javascript
微信小程序和百度的语音识别接口详解
2019/05/06 Javascript
javascrpt密码强度校验函数详解
2020/03/18 Javascript
[02:02]特效爆炸!DOTA2珍宝之瓶待你开启
2018/08/21 DOTA
pycharm 使用心得(一)安装和首次使用
2014/06/05 Python
Python实现中文数字转换为阿拉伯数字的方法示例
2017/05/26 Python
Django中日期处理注意事项与自定义时间格式转换详解
2018/08/06 Python
Python3+Requests+Excel完整接口自动化测试框架的实现
2019/10/11 Python
如何在python中写hive脚本
2019/11/08 Python
python标准库sys和OS的函数使用方法与实例详解
2020/02/12 Python
Python如何省略括号方法详解
2020/03/21 Python
flask项目集成swagger的方法
2020/12/09 Python
Dr. Martens马汀博士澳大利亚官网:马丁靴鼻祖
2019/07/02 全球购物
精选奢华:THE LIST
2019/09/05 全球购物
数字天堂软件测试面试题
2012/12/23 面试题
初中生自我评价
2014/02/01 职场文书
清洁工个人工作总结
2015/03/05 职场文书
2015年禁毒工作总结
2015/04/30 职场文书
行政二审代理词
2015/05/25 职场文书
小学体育组工作总结
2015/08/13 职场文书
MySQL三种方式实现递归查询
2022/04/18 MySQL