我有一个变量obj
obj可以是任何东西,我想检测obj是否是一个函数。通常我会做
typeof obj === 'function'
当obj是本机函数时,问题出现在IE< = 8中(至少知道它发生在window.open和window.alert中)。在IE类型的obj中,当对象是window.open ==='object'
时是否有可靠的方法来检查window.open是否实际上是一个函数?
我看到jQuery也失败了
$.isFunction(window.open) => false //in IE
这显然已经在jquery 1.3或其他东西中删除了,不知道他们之前是如何测试它的。
加了: 一种方式似乎是打电话
Function.prototype.apply.apply(window.open)
如果这不会引发错误,那么窗口打开就是一个功能。如果你这样做
Function.prototype.apply.apply({})
然后IE抛出错误“预期功能”。但是打开一个窗口检查一个变量是否是一个函数不是一个好的解决方案..
答案 0 :(得分:0)
在本机浏览器功能方面,功能检测应该足够了:
if (window.open) {
window.open(...)
}
如果有人覆盖原生函数,请不要使用他们的代码。他们不应该这样做,你要求的是问题。
如果没有某些背景,也很难回答这个问题。您正在传递obj
并将其作为函数调用。如果你传递多种数据类型并根据类型做一些不同的事情,我认为你不应该在这里处理函数。由于浏览器怪癖,显式创建一个函数来动态调用另一个函数,不进行错误检查。