jQuery中isFunction方法的BUG修復(fù)
jQuery 1.4 源碼 449 行(core.js 431 行),判斷是否為函數(shù)的方法如下(思路來(lái)源于 Douglas Crockford 的《The Miller Device》):
isFunction: function( obj ) {
return toString.call(obj) === "[object Function]";
},
同時(shí) jQuery 的作者也作了部分注釋?zhuān)?/P>
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 下無(wú)法正確識(shí)別 DOM 方法和一些函數(shù)(例如 alert 方法等)。
為什么會(huì)這樣呢?
[Ctrl+A 全選 注:引入外部Js需再刷新一下頁(yè)面才能執(zhí)行]
會(huì)發(fā)現(xiàn)在 IE 下用 typeof 檢測(cè) alert、confirm 方法以及 DOM 的方法顯示 object,而其他瀏覽器下顯示 function。
那如何完善這個(gè)問(wèn)題呢?
- typeof 檢測(cè)某個(gè)方法(例如:document.getElementById) 是否是 object,如何是,則重寫(xiě) isFunction 函數(shù);
- 怎樣重寫(xiě)呢?正則判斷傳入的對(duì)象字符串后(”" + fn),是否起始位置含有 function,即:/^\s*\bfunction\b/.test(” + fn)。
OK,看下根據(jù)以上思路修改后的 isFunction 函數(shù):
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); };})()
參考閱讀:
相關(guān)文章
JavaScript和JQuery實(shí)用代碼片段(一)
JavaScript和JQuery實(shí)用代碼片段,喜歡學(xué)習(xí)jquery的朋友可以參考下。2010-04-04頁(yè)面刷新時(shí)記住滾動(dòng)條的位置jquery代碼
這篇文章主要介紹了點(diǎn)擊按鈕頁(yè)面刷新的時(shí)候 記住滾動(dòng)條的位置,需要的朋友可以參考下2014-06-06基于Jquery代碼實(shí)現(xiàn)支持PC端手機(jī)端幻燈片代碼
支持PC端手機(jī)端幻燈片代碼是一款支持移動(dòng)觸摸,支持鼠標(biāo)拖拽切換,支持帶進(jìn)度條的自動(dòng)播放模式,本文給大家分享一款基于jquery代碼實(shí)現(xiàn)支持pc端手機(jī)端幻燈片代碼,感興趣的朋友一起學(xué)習(xí)吧2015-11-11jQuery實(shí)現(xiàn)的小圖列表,大圖展示效果幻燈片示例
這篇文章主要介紹了jQuery實(shí)現(xiàn)的小圖列表,大圖展示效果幻燈片,結(jié)合完整實(shí)例形式分析了jQuery圖片滑動(dòng)切換功能的相關(guān)實(shí)現(xiàn)技巧,需要的朋友可以參考下2016-10-10JS中批量給元素綁定事件過(guò)程中的相關(guān)問(wèn)題使用閉包解決
解決元素批量綁定事件的時(shí)候,出現(xiàn)i=最后一個(gè)循環(huán)變量的值的方法有兩種:把這個(gè)循環(huán)變量保存起來(lái),不要讓它的作用域在整個(gè)函數(shù),而是在循環(huán)體內(nèi)2013-04-04jQuery實(shí)現(xiàn)的自定義輪播圖功能詳解
這篇文章主要介紹了jQuery實(shí)現(xiàn)的自定義輪播圖功能,結(jié)合實(shí)例形式詳細(xì)分析了輪播圖的原理、實(shí)現(xiàn)步驟及相關(guān)操作技巧,需要的朋友可以參考下2018-12-12Jquery實(shí)現(xiàn)圖片預(yù)加載與延時(shí)加載的方法
這篇文章主要介紹了Jquery實(shí)現(xiàn)圖片預(yù)加載與延時(shí)加載的方法,分別介紹了原生javascript與jQuery插件實(shí)現(xiàn)圖片的預(yù)加載及延遲加載的方法,具有一定的參考借鑒價(jià)值,需要的朋友可以參考下2014-12-12