其实我不知道JS是怎么编的,但这两个头像让我很头疼
要说先有Object,可是Object本身就是 function Object (){}
Object 本身是个function ,它有function特有的属性 可写的prototype
当你var a={}的时候,你会发现这个a 的结构很简单,只有一层prototype而已
应该说没有function,就不会有object
那么是不是先有Function,我们可以看到Function 虽然也是 function Function(){}
但是Function 并没有两个prototype,只有一个只读的
并且Function有一个奇怪的特性,就是
Function.prototype.a = 5;
alert(Function.a) //5
另怪,Function.prototype一直跟下去的话,会发现最终还是会走到一个 object的实例上去
其实,我个人认为,Object并不是 个基类,但是所有的JS对象,原生的也好,后来声明的也好,最终都会挂一个Object的实例,注意是实例哦
就是 new 一个 Object,然后挂到所有对象的prototype上面去。
所以
Object.prototype.a=5;
那么所有JS对象不管是object也好,function也好,都会有一个属性,就是a
而Function则不一样
所有的function都是从Function中new出来的,所以,所有的function都会有属性a
但是要是把function再new上一遍,就不会有属性a了
实际的表现形式是
fuction aa(){}
aa.a //5
Number.a Array.a String a
因为Number什么的,都是function Number
而 b=5 ;b.a就不成立,因为b实际上是new Number
所以我个人认为应该是这样的
先有Function
有了Function再有function Object
再有Object的实例,再挂到Function,和所有对象上去。怎么看像是一种循环引用。
毕竟Object自己也挂了自己的实例。