jQuery中isFunction方法的BUG修复

2022-01-13,,,

修复 jQuery 中 isFunction 方法BUG

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 方法等)。

为什么会这样呢?

[Ctrl+A 全选 注:引入外部Js需再刷新一下页面才能执行]
会发现在 IE 下用 typeof 检测 alert、confirm 方法以及 DOM 的方法显示 object,而其他浏览器下显示 function。

那如何完善这个问题呢?

  1. typeof 检测某个方法(例如:document.getElementById) 是否是 object,如何是,则重写 isFunction 函数;
  2. 怎样重写呢?正则判断传入的对象字符串后(”" + 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
  • isFunction

相关文章

  • 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修复的详细内容,更多请关注本站其它相关文章!

《jQuery中isFunction方法的BUG修复.doc》

下载本文的Word格式文档,以方便收藏与打印。