五句话帮你轻松搞定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 String 对象
Apr 25 Javascript
javascript 的Document属性和方法集合
Jan 25 Javascript
js FLASH幻灯片字符串中有连接符&的处理方法
Mar 01 Javascript
jquery垂直公告滚动实现代码
Dec 08 Javascript
带左右箭头图片轮播的JS代码
Dec 18 Javascript
JavaScript eval() 函数介绍及应用示例
Jul 29 Javascript
Vue.js事件处理器与表单控件绑定详解
Mar 20 Javascript
Angular2入门教程之模块和组件详解
May 28 Javascript
vue使用map代替Aarry数组循环遍历的方法
Apr 30 Javascript
详解ES6数组方法find()、findIndex()的总结
May 12 Javascript
Typescript3.9 常用新特性一览(推荐)
May 14 Javascript
JavaScript实现简单日历效果
Sep 11 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
laravel框架 api自定义全局异常处理方法
2019/10/11 PHP
php的单例模式及应用场景详解
2021/02/27 PHP
Javascript 阻止javascript事件冒泡,获取控件ID值
2009/06/27 Javascript
Extjs在exlipse中设置自动提示的方法
2010/04/07 Javascript
javascript简易缓动插件(源码打包)
2012/02/16 Javascript
struts2+jquery+json实现异步加载数据(自写)
2013/06/24 Javascript
jquery实现鼠标滑过显示提示框的方法
2015/02/05 Javascript
javascript制作的滑动图片菜单
2015/05/15 Javascript
深入理解js函数的作用域与this指向
2016/05/28 Javascript
JS冒泡事件与事件捕获实例详解
2016/11/25 Javascript
JavaScript模块化之使用requireJS按需加载
2017/04/12 Javascript
详解如何使用babel进行es6文件的编译
2018/05/29 Javascript
Vue CL3 配置路径别名详解
2019/05/30 Javascript
vue 验证码界面实现点击后标灰并设置div按钮不可点击状态
2019/10/28 Javascript
wepy--用vantUI 实现上弹列表并选择相应的值操作
2020/11/03 Javascript
python实现k均值算法示例(k均值聚类算法)
2014/03/16 Python
pandas每次多Sheet写入文件的方法
2018/12/10 Python
python3 cvs将数据读取为字典的方法
2018/12/22 Python
python3.6生成器yield用法实例分析
2019/08/23 Python
使用PyInstaller将Pygame库编写的小游戏程序打包为exe文件及出现问题解决方法
2019/09/06 Python
jupyter修改文件名方式(TensorFlow)
2020/04/21 Python
Python经纬度坐标转换为距离及角度的实现
2020/11/01 Python
End Clothing美国站:英国男士潮牌商城
2018/04/20 全球购物
馥蕾诗美国官网:Fresh美国
2019/10/09 全球购物
先进党支部事迹材料
2014/01/13 职场文书
满月酒答谢词
2014/01/14 职场文书
电子商务个人职业生涯规划范文
2014/02/12 职场文书
销售总经理岗位职责
2014/03/15 职场文书
股东授权委托书范本
2014/09/13 职场文书
民主生活会对照检查材料思想汇报
2014/09/27 职场文书
民主生活会批评与自我批评总结
2014/10/17 职场文书
2014年后勤工作总结
2014/11/18 职场文书
运动与健康自我评价
2015/03/09 职场文书
关于践行三严三实的心得体会
2016/01/05 职场文书
房屋转让协议书(标准范本)
2016/03/21 职场文书
jQuery实现广告显示和隐藏动画
2021/07/04 jQuery