色尼玛亚洲综合影院,亚洲3atv精品一区二区三区,麻豆freexxxx性91精品,欧美在线91

jQuery中isFunction方法的BUG修復(fù)

jQuery 1.4 源碼 449 行(core.js 431 行),判斷是否為函數(shù)的方法如下(思路來源于 Douglas Crockford 的《The Miller Device》):

isFunction: function( obj ) {
   
return toString.call(obj) === "[object Function]";
},

同時(shí) 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 方法和一些函數(shù)(例如 alert 方法等)。

為什么會(huì)這樣呢?

[Ctrl+A 全選 注:如需引入外部Js需刷新才能執(zhí)行]
會(huì)發(fā)現(xiàn)在 IE 下用 typeof 檢測 alert、confirm 方法以及 DOM 的方法顯示 object,而其他瀏覽器下顯示 function。

那如何完善這個(gè)問題呢?

  1. typeof 檢測某個(gè)方法(例如:document.getElementById) 是否是 object,如何是,則重寫 isFunction 函數(shù);
  2. 怎樣重寫呢?正則判斷傳入的對象字符串后(”" + fn),是否起始位置含有 function,即:/^/s*/bfunction/b/.test(” + fn)。

OK,看下根據(jù)以上思路修改后的 isFunction 函數(shù):
復(fù)制代碼 代碼如下:
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》

JavaScript技術(shù)jQuery中isFunction方法的BUG修復(fù),轉(zhuǎn)載需保留來源!

鄭重聲明:本文版權(quán)歸原作者所有,轉(zhuǎn)載文章僅為傳播更多信息之目的,如作者信息標(biāo)記有誤,請第一時(shí)間聯(lián)系我們修改或刪除,多謝。

主站蜘蛛池模板: 惠水县| 抚宁县| 石家庄市| 松滋市| 新巴尔虎左旗| 融水| 岑巩县| 铅山县| 徐闻县| 淮滨县| 武穴市| 闸北区| 本溪市| 安阳县| 灌南县| 阿勒泰市| 永善县| 五莲县| 名山县| 鄂州市| 长武县| 盖州市| 鹤庆县| 包头市| 盐城市| 阿拉善盟| 泸州市| 东方市| 麻栗坡县| 上思县| 巩留县| 子长县| 分宜县| 泾川县| 西林县| 保定市| 陇川县| 邯郸市| 锡林浩特市| 买车| 三明市|