复习:JS三座大山-原型prototype

149 阅读1分钟

原型

公式

对象.__proto__===该对象的构造函数.prototype

根公理

Object.prototype是所有对象的(直接或间接)原型。


函数公理

所有的函数都是由Function构造的。即:

任何一个函数.__proto__===Function.prototype

//这个任何函数包括Object/Array/Function

根据上述内容引出一些一些容易导致混乱的问题

Q:一个数组的原型是Array.prototype,但上面说Object.prototype是所有对象的原型,那为何Object.prototype不是这个数组的原型呢?

A:原型是分为直接原型和间接原形的,对普通对象来说,Object.prototype就是个直接原型,对于数组和函数来说,Object.prototype是一个间接原型。

以这个数组为例,它的原型指向了Array.prototype,而Array又指向了Object.prototype


Q:你说Object.prototype是所有对象的原型,但是Object是由Function构造出来的,所以说应该是Function构造了Object.prototype,为什么Function不是万物的起源呢?

A:这涉及到一个对象和地址的区别,Object.prototype的地址在Object中,而Object.prototype的地址对应的那个对象并不在Object里。

所以说,Function构造出的Object.prototype实际是一个地址,一个存根对象的属性,而不是根对象本身。


这个可能会比较难以理解,不抓紧琢磨明白就会陷入鸡生蛋蛋生鸡的死循环之中,有空我再看一看内存图,做一下记录。