JS难点总结
这里我们先总结一下3条公式,等下会一一解释
LAW(1)
LAW(2)
LAW(3)
接下来我们从0开始构建一个JS世界
(1)我们需要创建一个根对象,他是所有对象的祖先[#268]
(2)接下来创建的是函数的原型对象[#306]和数组的原型对象[#146]
(3)有了基本的原型对象以后,我们需要创建一个所有函数的构造者Function
[#66]
这个函数的构造函数Function
是以函数对象[#306]为原型创建的,所以,他的_proto_属性就是[#306]
当这个构造函数去创建另一个函数f1()的时候,他会把所创建的函数的原型也就是f1._proto_
指向函数的原型[#306]
其实每个函数都拥有一个prototype属性,他的意思是我会把我创建的对象的原型指向哪,所以此时Function.prototype
就等于函数的原型对象[#306]
这时候就得出了LAW(2),此时你会发现Function._proto_
和Function.prototype
的值是相等的
那么带入公式2,我们是不是就可以得出Function
的构造者就是他自己呢,但是其实Function
是一开始由JS构造的,他都不存在又如何能构造自己呢,只不过被构造出来之后,被赋予了使命去构造其他的所有函数,这就有了LAW(2),但是为了统一成LAW(3),就指定了Function
的构造者就是他自己
(4)现在我们有了所有函数的构造函数Function
,就可以去创建其他的函数了,比如构造对象的函数Object
[#24]和构造数组的函数Array
[#58]