可变物镜可以是任何东西,我想检测如果obj的函数。通常情况下,我会做
typeof obj === 'function'
的问题是在IE < = 8时obj是一个本地函数(至少知道它window.open和window.alert发生)。在IE中typeof obj当对象是window.open时==='object'
有没有一种可靠的方法来检查window.open是否实际上是一个函数呢?
我看到的jQuery也没有对这个
$.isFunction(window.open) => false //in IE
这apperantly得到了jQuery的1.3或东西,不知道他们在此之前,如何测试它删除。
补充: 一种方式似乎是叫
Function.prototype.apply.apply(window.open)
如果这不会引发错误,则窗口打开是一个函数。如果你这样做
Function.prototype.apply.apply({})
然后IE会抛出一个错误“Function expected”。但是,几乎没有一个很好的解决方案,以打开一个窗口来检查变量的函数..
所以这只是本机函数在IE返回typeof对象的问题,但用户定义函数返回typeof函数?为什么只检查本地函数是否存在,即window.open!== undefined'是不够的?为什么你需要本地函数,这些函数被记录为这样做?对不起,只是想了解你的思维过程。 – Scott
看看@ 1.2及其对“函数”字面值的测试; http://code.google.com/p/jqueryjs/downloads/detail?name=jquery-1.2.js –
^@ AlexK。的相关代码链接'return !! fn && typeof fn!=“string”&& !fn.nodeName && fn.constructor!= Array && /function/i.test(fn +“”);'其中fn是函数名称 – Scott