五句话帮你轻松搞定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 相关文章推荐
jQuery使用append在html元素后同时添加多项内容的方法
Mar 26 Javascript
jQuery表格插件datatables用法汇总
Mar 29 Javascript
JS获取鼠标选中的文字
Aug 10 Javascript
Vuejs第十一篇组件之slot内容分发实例详解
Sep 09 Javascript
jquery 键盘事件的使用方法详解
Sep 13 jQuery
Vue中封装input组件的实例详解
Oct 17 Javascript
jQuery EasyUI window窗口使用实例代码
Dec 25 jQuery
Vue CLI3 开启gzip压缩文件的方式
Sep 30 Javascript
vue-lazyload使用总结(推荐)
Nov 01 Javascript
详解Vue一个案例引发「内容分发slot」的最全总结
Dec 02 Javascript
ES6 新增的创建数组的方法(小结)
Aug 01 Javascript
关于vue 结合原生js 解决echarts resize问题
Jul 26 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
用PHP制作静态网站的模板框架(四)
2006/10/09 PHP
PHP批量删除、清除UTF-8文件BOM头的代码实例
2014/04/14 PHP
ThinkPHP采用实现三级循环代码实例
2014/07/18 PHP
Zend Framework教程之配置文件application.ini解析
2016/03/10 PHP
php 解析xml 的四种方法详细介绍
2016/10/26 PHP
PHP中命名空间的使用例子
2019/03/22 PHP
YII2框架中日志的配置与使用方法实例分析
2020/03/18 PHP
javascript对浅拷贝和深拷贝的详解
2016/10/14 Javascript
原生JS实现匀速图片轮播动画
2016/10/18 Javascript
js eval函数使用,js对象和字符串互转实例
2017/03/06 Javascript
微信小程序 引入es6 promise
2017/04/12 Javascript
jQuery轮播图实例详解
2018/08/15 jQuery
原生jQuery实现只显示年份下拉框
2020/12/24 jQuery
[01:28]2014DOTA2国际邀请赛中国区预选赛四大豪门直升机抵达会场
2014/05/24 DOTA
Python MySQL数据库连接池组件pymysqlpool详解
2017/07/07 Python
Python中偏函数用法示例
2018/06/07 Python
Python实现多属性排序的方法
2018/12/05 Python
Python3内置模块之json编解码方法小结【推荐】
2020/12/09 Python
pycharm中显示CSS提示的知识点总结
2019/07/29 Python
python协程gevent案例 爬取斗鱼图片过程解析
2019/08/27 Python
python如何导出微信公众号文章方法详解
2020/08/31 Python
健康监测猫砂:Pretty Litter
2017/05/25 全球购物
天逸系统(武汉)有限公司Java笔试题
2015/12/29 面试题
文员个人求职自荐信
2013/09/21 职场文书
护士实习生自我鉴定范文
2013/12/10 职场文书
上班迟到检讨书
2014/01/10 职场文书
房屋租赁意向书
2014/04/01 职场文书
委托书模板
2014/04/04 职场文书
三八红旗手先进事迹材料
2014/05/13 职场文书
运动会演讲稿100字
2014/08/25 职场文书
自我管理的活动方案
2014/08/25 职场文书
授权委托书
2014/09/17 职场文书
学生保证书
2015/01/16 职场文书
稽核岗位职责
2015/02/10 职场文书
创业计划书之废品回收
2019/09/26 职场文书
新手,如何业余时间安排好写作、提高写作能力?
2019/10/21 职场文书