【发布时间】:2010-09-29 03:25:44
【问题描述】:
我对此进行了大量研究,但似乎使用的方法不一致且多种多样。
以下是我过去使用过的一些方法:
/* 1: */ typeof myFunc === 'function'
/* 2: */ myFunc.constructor === Function
/* 3: */ myFunc instanceof Function
作为我研究的一部分,我了解了一些知名图书馆是如何做到这一点的:
/* 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'
我很惊讶有这么多不同的方法被使用,肯定已经同意了一个可接受的测试吗?而且我完全不知道 jQuery 1.2.6 的再现的意图是什么,看起来有点 OTT...
那么,我的问题仍然存在,测试函数的最佳*方法是什么?
我也希望能深入了解上述一些方法,尤其是 jQuery 1.2.6 的方法。 (我可以看到他们在做什么,只是看起来很奇怪)
[*] 我所说的“最佳”是指最广泛接受的跨浏览器兼容方法。
编辑:是的,我知道它之前已经讨论过,但我仍然想讨论一下最有效的方法。为什么有这么多不同的使用方法?
到目前为止,关于 SO 的讨论只提到了 typeof 运算符(大部分),但没有人暗示替代方法的有效性。
【问题讨论】:
标签: javascript function