JS原型再理解

205 阅读1分钟

JS的三个重要公式

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

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

  3. 所有的函数都是由Function构造的(包括Object,Array,Function)


可能引起误解的地方

  1. XXX的原型 === XXX的.proto

  2. [1,2,3]是一个数组,也是一个对象,为什么他的原型是Array.prototype 而不是Object.prototype

因为Array.prototype是直接原型,Object.prototype是间接原型

即[1,2,3]的原型是Array.prototype , Array.prototype的原型是Object.prototype

  1. 根据公式三,我们可以得知Object是由Function构造的,那为什么Object.prototype是所有对象的原型,而不是Function

Object.prototype指向了一个地址,该地址表示的是一个对象,对象里面并不会包含另一个对象,所以Function只是构造了Object.prototype + 地址,而该地址表示的对象,则是JS一出生就含有的。

所以说,所有的对象都是由Object.prototype构造出来的。

注意点:上图中 #58 #24 #66 #146 #268 #306 是没有名字的,只不过window将其地址付给了一个变量,他们才有了名字


参考资料来源:饥人谷