三大定理

对象.proto===其构造函数.prototype

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

所有函数都由Function创造(任何函数.proto===Function.prototype,任意函数包括Object/Array/Function)

拨乱反正

XXX的原型

的原型等价于.proto
中文的原型无法区分proto和prototype
所以我们约定原型默认表示proto
只不过proto正好等于某个函数的prototype

Object.prototype是所有对象的原型

原型分两种,直接原型和间接原型
对于普通对象来说,Object.prototype是直接原型
对于数组函数来说,Object.prototype是间接原型

Object.prototype不是根对象?

Function创造了Object.prototype这个地址,但是这个地址所对应的对象是根对象。

一图画出JS世界

image.png

总结

构造函数

是用来构造对象的
会预先存好对象的原型,原型的原型是根
new的时候将对象的proto指向原型

对象

所有对象都直接或间接的指向根对象
如果对象想分类,就在原型链上加一环
用构造对象可以加这一环