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