作家
登录

jQuery中isFunction方法的BUG修复

作者: 来源:www.28hudong.com 2013-03-30 01:55:19 阅读 我要评论

jQuery 1.4 源码 449 行(core.js 431 行),判断是否为函数的方法如下(思路来源于 Douglas Crockford 的《The Miller Device》):isFunction: function( obj ) { return toString.call(obj) === "[object Function]";}, 同时 jQuery 的作者也作了部分注释: See test/unit/core.js for details concerning isFunction. Since version 1.3, DOM methods and functions like alert aren't supported. They return false on IE (#2968). 即:此方法在 IE 下无法正确识别 DOM 方法和一些函数(例如 alert 方法等)。 为什么会这样呢? 修复 jQuery 中 isFunction 方法的 BUG 使用 typeof 运算符检测各种方法: 测试原始的 isFunction 函数方法 测试修复后 isFunction 函数方法 [Ctrl+A 全选 注:如需引入外部Js需刷新才能执行]会发现在 IE 下用 typeof 检测 alert、confirm 方法以及 DOM 的方法显示 object,而其他浏览器下显示 function。 那如何完善这个问题呢? typeof 检测某个方法(例如:document.getElementById) 是否是 object,如何是,则重写 isFunction 函数; 怎样重写呢?正则判断传入的对象字符串后(”" + fn),是否起始位置含有 function,即:/^s*bfunctionb/.test(” + fn)。 OK,看下根据以上思路修改后的 isFunction 函数:复制代码 代码如下:var isFunction = (function() { // Performance optimization: Lazy Function Definition return "object" === typeof document.getElementById ? isFunction = function(fn){ try { return /^s*bfunctionb/.test("" + fn); } catch (x) { return false } }: isFunction = function(fn){ return "[object Function]" === Object.prototype.toString.call(fn); };})() 参考阅读: 《isFunction hacked, isCallable solution》 《isFunction() or isObject(), that is the question ? 》 《Lazy Function Definition Pattern》

  推荐阅读

  javascript 的Document属性和方法集合

document.title //设置文档标题等价于HTML的title标签 document.bgColor //设置页面背景色 document.fgColor //设置前景色(文本颜色) document.linkColor //未点击过的链接颜色 document.alinkColor //激活链接(焦>>>详细阅读


本文标题:jQuery中isFunction方法的BUG修复

地址:http://www.17bianji.com/kaifa2/JS/27191.html

关键词: 探索发现

乐购科技部分新闻及文章转载自互联网,供读者交流和学习,若有涉及作者版权等问题请及时与我们联系,以便更正、删除或按规定办理。感谢所有提供资讯的网站,欢迎各类媒体与乐购科技进行文章共享合作。

网友点评
自媒体专栏

评论

热度

精彩导读
栏目ID=71的表不存在(操作类型=0)