五句话帮你轻松搞定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 arguments 传递给函数的隐含参数
Aug 21 Javascript
文本框中禁止非数字字符输入比如手机号码、邮编
Aug 19 Javascript
容易造成JavaScript内存泄露几个方面
Sep 04 Javascript
angular.element方法汇总
Jan 07 Javascript
在JavaScript中使用NaN值的方法
Jun 05 Javascript
深入浅析JavaScript中对事件的三种监听方式
Sep 29 Javascript
js实现下拉列表选中某个值的方法(3种方法)
Dec 17 Javascript
jquery中object对象循环遍历的方法
Dec 18 Javascript
js/jq仿window文件夹框选操作插件
Mar 08 Javascript
Bootstrap输入框组件使用详解
Jun 09 Javascript
浅谈对Angular中的生命周期钩子的理解
Jul 31 Javascript
vue2单元测试环境搭建
May 24 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
Mysql的常用命令
2006/10/09 PHP
学习php中的正则表达式
2014/08/17 PHP
javascript应用:Iframe自适应其加载的内容高度
2007/04/10 Javascript
javascript高亮效果的二种实现方法
2008/09/14 Javascript
Jquery ThickBox插件使用心得(不建议使用)
2010/09/08 Javascript
在JavaScript中获取请求的URL参数[正则]
2010/12/25 Javascript
javascript在子页面中函数无法调试问题解决方法
2014/01/17 Javascript
Node.js文件操作详解
2014/08/16 Javascript
Javascript数组Array基础介绍
2016/03/13 Javascript
Vue.js基础学习之class与样式绑定
2017/03/20 Javascript
ionic环境配置及问题详解
2017/06/27 Javascript
关于vue.js发布后路径引用的问题解决
2017/08/15 Javascript
解决vue项目使用font-awesome,build后路径的问题
2018/09/01 Javascript
详解在vue-cli中使用graphql即vue-apollo的用法
2018/09/08 Javascript
Vue中 v-if/v-show/插值表达式导致闪现的原因及解决办法
2018/10/12 Javascript
Python实例之wxpython中Frame使用方法
2014/06/09 Python
Django集成百度富文本编辑器uEditor攻略
2014/07/04 Python
深入理解Python中的元类(metaclass)
2015/02/14 Python
python中常用检测字符串相关函数汇总
2015/04/15 Python
python下载文件记录黑名单的实现代码
2017/10/24 Python
python3实现点餐系统
2019/01/24 Python
python实现多线程端口扫描
2019/08/31 Python
python 命名规范知识点汇总
2020/02/14 Python
使用gunicorn部署django项目的问题
2020/12/30 Python
美国首屈一指的高品质珠宝设计师和零售商:Allurez
2018/01/23 全球购物
阿迪达斯荷兰官方网站:adidas荷兰
2018/03/16 全球购物
世界上最大的隐形眼镜商店:1-800 Contacts
2018/11/03 全球购物
俄罗斯连接商品和买家的在线平台:goods.ru
2020/11/30 全球购物
高一自我鉴定
2013/12/17 职场文书
2014年教师思想工作总结
2014/12/03 职场文书
行政撤诉申请书
2015/05/18 职场文书
2015年英语教师工作总结
2015/05/20 职场文书
大学生暑假实习总结
2015/07/13 职场文书
如何用threejs实现实时多边形折射
2021/05/07 Javascript
解析高可用Redis服务架构分析与搭建方案
2021/06/20 Redis
教你使用一行Python代码玩遍童年的小游戏
2021/08/23 Python