当前位置:  开发笔记 > 编程语言 > 正文

在JavaScript中测试函数的最佳方法?

如何解决《在JavaScript中测试函数的最佳方法?》经验,为你挑选了1个好方法。

我已经对此进行了相当多的研究,但似乎使用的方法不一致且多种多样.

以下是我过去使用过的一些方法:

/* 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的讨论只提到了运营商类型(主要是),但没有人暗示其他方法的有效性.



1> Borgar..:

测试对象是否是函数的最佳方法是typeof myFunc === 'function'.如果您使用的是库,请使用该库的功能测试:jQuery.isFunction(myFunc).

在使用时,事物可能被误报为功能typeof.这是非常罕见的,但是库可以消除这些不一致性.jQuery解决这些问题:

Firefox报告功能 typeof document.createElement("object")

Safari报告功能 typeof document.body.childNodes

较旧版本的Firefox将正则表达式报告为函数(3.0中不是这种情况).

据报道,一些构建在全局函数(alert)和一些节点方法(getAttribute)中的IE 是"对象"类型.

使用instanceof而不是typeof绕过其中一些.例如, document.createElement("object") instanceof Functionfalse在Firefox.

您可以在原始票证的注释中查看第一种方法的诞生(#3618).新方法来自变更集5947,似乎是Resig发明的,用于解决IE内存泄漏问题.它可能更慢,但更小,更清洁.

这里的==和===之间没有太大的区别,就事情的工作方式而言,严格的评估是如此快一点,因而是首选.

推荐阅读
有风吹过best
这个屌丝很懒,什么也没留下!
DevBox开发工具箱 | 专业的在线开发工具网站    京公网安备 11010802040832号  |  京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有