如何判断JavaScript中的函数是否已定义?
我想做这样的事情
function something_cool(text, callback) {
alert(text);
if( callback != null ) callback();
}
Run Code Online (Sandbox Code Playgroud)
但它让我了
回调不是一个功能
未定义回调时出错.
我已经对此进行了相当多的研究,但似乎使用的方法不一致且多种多样.
以下是我过去使用过的一些方法:
/* 1: */ typeof myFunc === 'function'
/* 2: */ myFunc.constructor === Function
/* 3: */ myFunc instanceof Function
Run Code Online (Sandbox Code Playgroud)
作为我研究的一部分,我看了一些知名图书馆如何实现这一目标:
/* jQuery 1.2.6: */ !!fn && typeof fn != "string" && !fn.nodeName && fn.constructor != Array && /^[\s[]?function/.test( fn + "" )
/* jQuery 1.3b1: */ toString.call(obj) === "[object Function]"
/* Prototype 1.6: */ typeof object == "function"
/* YUI 2.6: */ typeof o === 'function'
Run Code Online (Sandbox Code Playgroud)
令人惊讶的是,有很多不同的方法使用,肯定已经达成了一个可接受的测试?而且我完全不知道jQuery 1.2.6的表现是什么意思,看起来有点OTT ......
所以,我的问题仍然存在,测试函数的最佳方法是什么?
我还要了解一些上述方法的一些见解,尤其是jQuery 1.2.6.(我可以看到他们在做什么,这看起来很奇怪)
[*]"最好",我的意思是最广泛接受的跨浏览器兼容方法.
编辑:是的,我知道之前已经讨论过,但我仍然喜欢讨论最有效的方法.为什么有这么多不同的使用方法?
到目前为止,关于SO的讨论只提到了运营商类型(主要是),但没有人暗示其他方法的有效性.