五句话帮你轻松搞定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创建类/对象的几种方式概述及实例
May 06 Javascript
jquery获取当前点击对象的value方法
Feb 28 Javascript
JavaScript实现图片自动加载的瀑布流效果
Apr 11 Javascript
js的form表单提交url传参数(包含+等特殊字符)的两种解决方法
May 25 Javascript
H5移动端图片压缩上传开发流程
Nov 09 Javascript
ES6中Class类的静态方法实例小结
Oct 28 Javascript
JS声明对象时属性名加引号与不加引号的问题及解决方法
Feb 16 Javascript
Vue如何实现响应式系统
Jul 11 Javascript
Vue路由守卫之路由独享守卫
Sep 25 Javascript
JS实现4位随机验证码
Oct 19 Javascript
解决elementui表格操作列自适应列宽
Dec 28 Javascript
JavaScript使用setTimeout实现倒计时效果
Feb 19 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
Search Engine Friendly的URL设计
2006/10/09 PHP
使用PHP接收POST数据,解析json数据
2013/06/28 PHP
php解析xml提示Invalid byte 1 of 1-byte UTF-8 sequence错误的处理方法
2013/11/14 PHP
PHP编程中的__clone()方法使用详解
2015/11/27 PHP
PHP中include()与require()的区别说明
2017/02/14 PHP
document.execCommand()的用法小结
2014/01/08 Javascript
jquery图片轮播插件仿支付宝2013版全屏图片幻灯片
2014/04/03 Javascript
jQuery移除tr无效的解决方法(tr是动态添加)
2014/09/22 Javascript
JavaScript中document对象使用详解
2015/01/06 Javascript
[原创]JavaScript语法高亮插件highlight.js用法详解【附highlight.js本站下载】
2016/11/01 Javascript
微信小程序 跳转传递数据的实例
2017/07/06 Javascript
Vue.js实现网格列表布局转换方法
2017/08/25 Javascript
基于vue 动态加载图片src的解决方法
2018/02/05 Javascript
使用vue脚手架(vue-cli)搭建一个项目详解
2019/05/09 Javascript
js数据类型转换与流程控制操作实例分析
2019/12/18 Javascript
浅谈webpack构建工具配置和常用插件总结
2020/05/11 Javascript
vue实现从外部修改组件内部的变量的值
2020/07/30 Javascript
vue.js 输入框输入值自动过滤特殊字符替换中问标点操作
2020/08/31 Javascript
[02:54]DOTA2英雄基础教程 暗影牧师戴泽
2013/12/05 DOTA
在Python中用has_key()方法查找键是否存在的教程
2015/05/21 Python
Python数组遍历的简单实现方法小结
2016/04/27 Python
Python实现正整数分解质因数操作示例
2018/08/01 Python
pandas的排序和排名的具体使用
2019/07/31 Python
Python3 chardet模块查看编码格式的例子
2019/08/14 Python
Python基于httpx模块实现发送请求
2020/07/07 Python
营销与策划应届生求职信
2013/11/04 职场文书
审核会计岗位职责
2013/11/08 职场文书
优秀导游先进事迹材料
2014/01/25 职场文书
小学运动会入场式解说词
2014/02/18 职场文书
2014年五一劳动节社区活动总结
2014/04/14 职场文书
经营目标管理责任书
2014/07/25 职场文书
学习心理学心得体会
2016/01/22 职场文书
导游词之千岛湖
2019/09/23 职场文书
你离财务总监还有多远?速览CFO的岗位职责
2019/11/18 职场文书
Keras在mnist上的CNN实践,并且自定义loss函数曲线图操作
2021/05/25 Python
MYSQL 运算符总结
2021/11/11 MySQL