在javascript中我们通常认为Object是Top Level。但在语言实现过程中真的是这样吗

你的意思是不是让 new (function(){}) instanceof Function 结果为true?其实分析这么久我没太明白你的意思是什么,但是从你的推导过程或许猜到你的模糊的地方,当然我也是猜测哈,不知道和不合题意~先看这两处吧:(function(){}) instanceof Object //falsenew (function(){}) instanceof Object //true为什么new了就变成Object 的实例了,此处要从new来下手,官方说明中,new关键词包含以下三个过程1、创建空对象;2、将类(如function Base(){})的prototype属性赋值给新创的对象的__proto__属性 ;3、通过call方法让新创建的空对象能调用类里面的变量及方法;这就说明了,new创建了一个空对象然后通过改变prototype与使用call来使得这个空对象具备那个类即上例的Base的一些属性,但他本身依然是个Object,所以使得new (function(){}) instanceof Object 结果为true。还有你说的“只有function类型的对象是Function的实例”,此处我不知道该怎么理解,你的意思是不是指的是function类型的对象的原型都是Function.prototype?因为我一般看到实例两个字总是不自觉的给new一下,于是我的结论是“function类型的对象是Object的实例”。。。如果我理解错了还望指点说道Function.prototype,忘了在哪看到一句话:js的内部对象中,Object,Number,Boolean,String,Array,RegExp,Date,Function,Error的原型是Function.prototype。而Math和JSON对象的原型是Object.prototype。再推导一下:Function.__proto__=Object.__proto__=Function.prototype;Function.prototype.__proto__ = Object.prototype=null;而Object.__proto__!=Object.prototype;大概就这么个关系吧。我不知道我说的对不对,也算是借你这个问题来总结一下我了解的知识,不足之处不对的地方多多指点!
■网友
因为对象(Object)和属性(Property)的对应关系是非常明显的,而js一个直接的设计理念就是:所有变量作为全局(global,即BOM的window)的属性出现。因此我们可以看到,全局本身是一个对象,所以认为对象是一等公民是很自然的。然而另一方面,js是原型继承的。这意味着早期js的设计是没有类的概念的。然而在传统面向对象的语言中,类作为构造对象的方式是极其重要的,而在js中这个作用由函数(function)来承担了。所以说js中object源自function这样的说法也是有道理的。因此你可以看到,Object作为所有对象的来源,本身是一个函数;而Function.prototype作为所有函数的基础,它从理念上是个对象(typeof是function正是由于object不能先于构造器存在而决定的)。因此js的函数和对象类似蛋和鸡的关系,但从本质上来说,可以认为先有了对象的概念,然后有了函数,之后才有具体的对象。


    推荐阅读