某天突然想知道 Object 和 Function的关系,在网上找到了这张图,看完后思路清晰了很多,在那图的基础上,我加上了Number,Boolean,String等三个系统提供的类型构造器和Object Function的关系图如上。

他们中只有 Function的prototype和__proto__是相同的。

其他的构造器 不无都是 Function 构造出来的对象,也叫是Function的实例是因为Object,Number,Boolean,String 甚至自定义的Foo 的__proto__无不都指向

Function.prototype 也就是function Empty .

而Function同时也是自己的构造函数 Function.constructor === Function

所以,js的对象系统里,可以说 所有的构造函数都是由Function构造而来

 

函数里最特别的一个就是 Function.prototype 也就是 Empty

Function.prototype.hasOwnProperty("prototype") //false

typeof Function.prototype;//function

也就是说这是唯一一个没有Prototype的函数

它是所有构造函数作为对象存在的 原型 Object.__proto__ , Function.__proto__,Number.__proto__ 设置是所有自定义构造函数比如Foo的原型 Foo.__proto__

 

而Empty 虽然没有 prototype但是 作为一个对象依然还是有__proto__,也就是 Object.prototype了。于是这就吻合了那句定义。。 Object.prototype是js里所有对象原型链的顶端。。。。。(undefined除外)

 

最后有个特例,就是 那么undefined应该放在哪里呢,在这个js object 的关系视图里

JavaScript Object layout

 posted on 2011-12-06 18:20 落叶满长沙 阅读(...) 评论(...) 编辑 收藏