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 方法等)。
为什么会这样呢?
使用 typeof 运算符检测各种方法:
测试原始的 isFunction 函数方法
测试修复后 isFunction 函数方法
[Ctrl+A 全选 注:引入外部Js需再刷新一下页面才能执行]
会发现在 IE 下用 typeof 检测 alert、confirm 方法以及 DOM 的方法显示 object,而其他浏览器下显示 function。
那如何完善这个问题呢?
- typeof 检测某个方法(例如:document.getElementById) 是否是 object,如何是,则重写 isFunction 函数;
- 怎样重写呢?正则判断传入的对象字符串后(”" + fn),是否起始位置含有 function,即:/^\s*\bfunction\b/.test(” + fn)。
OK,看下根据以上思路修改后的 isFunction 函数:
复制代码 代码如下:
var isFunction = (function() { // Performance optimization: Lazy Function Definition return "object" === typeof document.getElementById ? isFunction = function(fn){ try { return /^\s*\bfunction\b/.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》
您可能感兴趣的文章:
- isArray()函数(JavaScript中对象类型判断的几种方法)
- JavaScript isArray()函数判断对象类型的种种方法
- js判断是否为数组的函数: isArray()
- 关于jQuery $.isNumeric vs. $.isNaN vs. isNaN
- 代码分析jQuery四种静态方法使用
相关文章
-
jQuery+PHP打造滑动开关效果
这篇文章主要介绍了jQuery+PHP打造滑动开关效果,实现类似360安全卫士防火墙开启关闭的开关,非常的实用,这里推荐给大家 2014-12-12
-
jQuery提示插件alertify使用指南
alertifyjs是一个非侵入式,可定制的JavaScript通知组件。包括可定制的对话框,和右下角消息弹出框。完全可定制的警报,确认和提示对话框、完全自定义的通知系统、回调参数处理包括“确定“和”取消“按钮的点击、允许对话框排队 2015-04-04
-
jquery.cookie.js实现用户登录保存密码功能的方法
这篇文章主要介绍了jquery.cookie.js实现用户登录保存密码功能的方法,结合实例形式详细分析了jquery.cookie.js插件操作cookie实现保存用户登录信息的相关技巧,需要的朋友可以参考下 2016-04-04
-
jQuery+CSS实现的标签页效果示例【测试可用】
这篇文章主要介绍了jQuery+CSS实现的标签页效果,涉及基于jQuery的事件绑定、页面元素属性动态操作相关实现技巧,需要的朋友可以参考下 2018-08-08
-
jQuery插件ContextMenu自定义图标
这篇文章主要为大家详细介绍了jQuery插件ContextMenu自定义图标的相关代码,具有一定的参考价值,感兴趣的小伙伴们可以参考一下 2017-03-03
-
jQuery动画效果animate和scrollTop结合使用实例
animate是jq的一个特效的函数方法,animate() 方法执行 CSS 属性集的自定义动画。该方法通过CSS样式将元素从一个状态改变为另一个状态。 2014-04-04
-
jQuery Study Notes学习笔记 (二)
jquery简单选择器的使用方法。jquery中最基本的东西了。 2010-08-08
-
jQuery实现鼠标响应式淘宝动画效果示例
这篇文章主要介绍了jQuery实现鼠标响应式淘宝动画效果,涉及jQuery事件响应及页面元素属性动态操作相关使用技巧,需要的朋友可以参考下 2018-02-02
-
锋利的jQuery 要点归纳(三) jQuery中的事件和动画(下:动画篇
《锋利的jQuery》要点归纳(三) jQuery中的事件和动画(下:动画篇) 2010-03-03
-
基于jquery fly插件实现加入购物车抛物线动画效果
在购物网站中,加入购物车的功能是必须的功能,有的网站在用户点击加入购物车按钮时,就会出现该商品从点击出以抛物线的动画相似加入购物车,这个功能看起来非常炫,对用户体验也有一定的提高。下面介绍基于jquery fly插件实现加入购物车抛物线动画效果 2016-04-04
最新评论
大家感兴趣的内容
- 1jquery加载页面的方法(页面加载完
- 2Jquery获取和修改img的src值的方
- 3jQuery判断checkbox是否选中的3种
- 4jquery获取复选框被选中的值
- 5JQuery 绑定select标签的onchang
- 6JQuery判断radio(单选框)是否选
- 7jquery $(document).ready() 与w
- 8jquery判断元素是否隐藏的多种方
- 9jquery 将disabled的元素置为ena
- 10jquery中获取id值方法小结
最近更新的内容
- 使用jQuery实现一个类似GridView的编辑,更
- jquery实现图片翻页效果
- jQuery寻找n以内完全数的方法
- BootStrap 标题设置跨行无效的解决方法
- Jquery 跨域访问 Lightswitch OData Serv
- jQuery调用AJAX时Get和post公用的乱码解决
- 基于jquery的一个浮动框(扩展性比较好 )
- jquery中html、val与text三者属性取值的联
- 基于jQuery实现简单人工智能聊天室
- jQuery之尺寸调整组件的深入解析
常用在线小工具
微信投稿脚本任务在线工具
关注微信公众号
关于我们 - 广告合作 - 联系我们 - 免责声明 - 网站地图 - 投诉建议 - 在线投稿
©CopyRight 2006-2021 JB51.Net Inc All Rights Reserved. 本站 版权所有
以上就是jQuery中isFunction方法的BUG修复的详细内容,更多请关注本站其它相关文章!