博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
原型、原型链
阅读量:6672 次
发布时间:2019-06-25

本文共 2958 字,大约阅读时间需要 9 分钟。

首先这是完整的原型链图(图片来自百度,在这里是引用他的图片, 未曾谋面但是笔者向其表达敬意);

这一整张图,我们只需要构造一个函数;

图中已经构造好了一个函数  Person();

我们知道:

万物皆对象:构造函数既是一个函数,同时也是个对象,原型同时也是一个对象 如果声明了一个构造函数,系统内部就会帮我们自动的生成一个与之对应的原型对象 .prototype : 用于访问原型对象 .__proto__  : 是属于对象的,指向实例化这个对象的构造函数对应的原型 .constructor  : 属于原型的 , 指向这个原型对应的 构造函数

 ----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------

构造的函数 Person(); 系统会自动帮我们生成一个函数对象 Person.prototype原型 

Person();可以用语法 Person.prototype 来访问它的原型

而  Person.prototype.constructor 是用来指回他的构造函数 Person(); 的 

在控制台上打出来: 

 

用图表示是:

-----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------

而 Person(); 实例化的对象 P1  可以用 .__proto__ 来指回到他的原型

在控制台中打出来:

-----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------

整个过程用图表示就是这个样子的

-----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------

原型同是也是一个对象,

那么Person.prototype 它对应的原型是什么?

是 Object.prototype 

 

Object.prototype是一个原型, 也是一个对象,

它对应的原型又是什么?

是 null ;

null之后就没有了;因为null本身就是”无“的意思。

------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------

构造函数 Person(); 同时也是一个实例化的对象

那谁是它的原型呢?

这里我们要知道一点: 函数是一个对象,这个对象是由 Function构造函数 实例化的

那么  

 

于是用 Function.prototype 指回 它的构造函数 也会有

 

但是  注意一点 Function 它也是一个构造函数

那就是说 Function 也会把它本身实例化 : 

于是会有

 

 

整个的过程是

 

------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------

 同时Function.prototype原型 也是一个对象

它也是和 Person.prototype 原型一样 看做一个对象

那么这个对象也会指向 Object.prototype 原型

  而 Object.prototype 原型 同时也可以看做是一个对象  最终会指向null

 

------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------

 既然Object.prototype是原型 也肯定有它对应的构造函数

我们用 .constructor 打印出来看看

 

那么Object 也一定会有

------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------

于是  我们整个的原型链就完成了

用图表示就是

 

转载于:https://www.cnblogs.com/mlw1814011067/p/10063836.html

你可能感兴趣的文章
你或许不知道Vue的这些小技巧
查看>>
Vue2.0进阶组件篇1 教你秒撸(短信倒计时组件)
查看>>
测试你的前端代码 - part2(单元测试)
查看>>
使用 Cocos Creator 打造自己的爆款小游戏《方块弹珠》!
查看>>
PHP 依赖注入 (DI) 和容器 (IoC) 的简单实现
查看>>
BCH文件安全存储系统——BFP
查看>>
Python | 数据分析实战Ⅰ
查看>>
Salesforce开源TransmogrifAI:用于结构化数据的端到端AutoML库
查看>>
社会的分工合作(ASIC)才是带来人类富裕的基础
查看>>
全面剖析SharedPreferences
查看>>
0826 - 事情多到让人绝望啊
查看>>
Logback中使用TurboFilter实现日志级别等内容的动态修改
查看>>
Spring Boot中增强对MongoDB的配置(连接池等)
查看>>
网络安全-CSRF
查看>>
Andorid Studio NDK开发-Hello World
查看>>
IDEA中maven工程指定JDK版本
查看>>
Git 详细的操作指南笔记(从零开始)
查看>>
【手把手带你撸一个脚手架】第二步, 搭建开发环境
查看>>
JS专题之严格模式
查看>>
Python设计模式-装饰器模式
查看>>