五句话帮你轻松搞定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 表单的友好用户体现
Jan 07 Javascript
Confirmer JQuery确认对话框组件
Jun 09 Javascript
js 上传图片预览问题
Dec 06 Javascript
php对mongodb的扩展(小试牛刀)
Nov 11 Javascript
Jquery实现列表(隔行换色,全选,鼠标滑过当前行)效果实例
Jun 09 Javascript
node.js中的fs.fsyncSync方法使用说明
Dec 15 Javascript
javascript删除元素节点removeChild()用法实例
May 26 Javascript
简介JavaScript中valueOf()方法的使用
Jun 05 Javascript
Servlet实现文件上传,可多文件上传示例
Dec 05 Javascript
利用node.js本地搭建HTTP服务器
Apr 19 Javascript
讲解vue-router之命名路由和命名视图
May 28 Javascript
如何在Angular应用中创建包含组件方法示例
Mar 23 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 JSON 数据解析代码
2010/05/26 PHP
PHP实现批量生成App各种尺寸Logo
2015/03/19 PHP
基于jquery的兼容各种浏览器的iframe自适应高度的脚本
2010/08/13 Javascript
js中if语句的几种优化代码写法
2011/03/12 Javascript
JSONP 跨域访问代理API-yahooapis实现代码
2012/12/02 Javascript
javacript使用break内层跳出外层循环分析
2015/01/12 Javascript
使用jQuery判断浏览器滚动条位置的方法
2016/05/30 Javascript
基于Particles.js制作超炫粒子动态背景效果(仿知乎)
2017/09/13 Javascript
JS实现区分中英文并统计字符个数的方法示例
2018/06/09 Javascript
jQuery 同时获取多个标签的指定内容并储存为数组
2018/11/20 jQuery
微信小程序开发问题之wx.previewImage
2018/12/25 Javascript
js类的继承定义与用法分析
2019/06/21 Javascript
laypage+SpringMVC实现后端分页
2019/07/27 Javascript
介绍Python的Django框架中的QuerySets
2015/04/20 Python
Django中模型Model添加JSON类型字段的方法
2015/06/17 Python
Python3 中文文件读写方法
2018/01/23 Python
python深度优先搜索和广度优先搜索
2018/02/07 Python
Python简单实现查找一个字符串中最长不重复子串的方法
2018/03/26 Python
numpy matrix和array的乘和加实例
2018/06/28 Python
python处理数据,存进hive表的方法
2018/07/04 Python
python3结合openpyxl库实现excel操作的实例代码
2018/09/11 Python
攻击者是如何将PHP Phar包伪装成图像以绕过文件类型检测的(推荐)
2018/10/11 Python
python多个模块py文件的数据共享实例
2019/01/11 Python
Python日志:自定义输出字段 json格式输出方式
2020/04/27 Python
如何使用Cython对python代码进行加密
2020/07/08 Python
HTML5移动端开发中的Viewport标签及相关CSS用法解析
2016/04/15 HTML / CSS
美国时尚孕妇装品牌:A Pea in the Pod
2017/07/16 全球购物
印尼披萨外送专家:Domino’s Pizza印尼
2017/12/28 全球购物
Dr.Jart+美国官网:韩国药妆品牌
2019/01/18 全球购物
计算机数据库专业职业生涯规划书
2014/02/08 职场文书
《小猪家的桃花树》教学反思
2014/04/11 职场文书
健康教育评估方案
2014/05/25 职场文书
小学师德师风整改措施
2014/10/27 职场文书
2014年商场工作总结
2014/11/22 职场文书
入伍通知书
2015/04/23 职场文书
编写python程序的90条建议
2021/04/14 Python