Javascript toString怪癖

Javascript toString怪癖,javascript,Javascript,假设我定义了一个不做任何事情的简单函数:function fn(){} 现在,当我运行toString(fn)时,我得到“[object]”。当我运行toString.call(fn)时,我得到“[object Function]”。有人知道为什么我在使用call方法时会得到更具体的类型吗 编辑:此行为在FireFox运行FireBug控制台中显示。toString.constructor和toString.call.constructor都产生“Function()”toString不接受参数

假设我定义了一个不做任何事情的简单函数:
function fn(){}

现在,当我运行
toString(fn)
时,我得到“[object]”。当我运行
toString.call(fn)
时,我得到“[object Function]”。有人知道为什么我在使用
call
方法时会得到更具体的类型吗


编辑:此行为在FireFox运行FireBug控制台中显示。
toString.constructor
toString.call.constructor
都产生“Function()”

toString不接受参数,因此
toString(fn)
与刚才的
toString()
相同,后者返回一个隐式全局对象,转换为字符串
toString.call(fn)
calls
global.toString
这样传递函数对象,但是由于
global.toString
是对象的一种方法,因此结果不同于
function.toString

请详细说明。你是在JavaScript解释器中调用它吗?哪一个?犀牛jrunscript?哪个版本?有趣的是,据我所知,toString是在对象原型上定义的方法,而不是内置函数。所以,问题是,你在调用谁的toString,它接收什么参数?我通过Firebug 1.4.5控制台运行了这段代码。我之所以感到好奇,是因为我在jQuery源代码中看到了toString.call这样的用法,并开始进行实验。我完全按照问题所示运行代码(因此没有“someobject.toString”)。这可能类似于感谢您指出了我实验中的一个明显缺陷:我忘记了我没有将fn作为参数传递到调用中,而是作为上下文传递!现在这一切都完全有道理了。