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 方法等)。
為什么會這樣呢?
[Ctrl+A 全選 注:引入外部Js需再刷新一下頁面才能執(zhí)行]
會發(fā)現(xiàn)在 IE 下用 typeof 檢測 alert、confirm 方法以及 DOM 的方法顯示 object,而其他瀏覽器下顯示 function。
那如何完善這個(gè)問題呢?
- typeof 檢測某個(gè)方法(例如:document.getElementById) 是否是 object,如何是,則重寫 isFunction 函數(shù);
- 怎樣重寫呢?正則判斷傳入的對象字符串后(”" + 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)文章
Jquery實(shí)現(xiàn)textarea根據(jù)文本內(nèi)容自適應(yīng)高度
本文給大家分享的是Jquery實(shí)現(xiàn)textarea根據(jù)文本內(nèi)容自適應(yīng)高度,這些在平時(shí)的項(xiàng)目中挺實(shí)用的,所以抽空封裝了一個(gè)文本框根據(jù)輸入內(nèi)容自適應(yīng)高度的插件,這里推薦給小伙伴們。2015-04-04
jquery判斷小數(shù)點(diǎn)兩位和自動(dòng)刪除小數(shù)兩位后的數(shù)字
這篇文章主要介紹了jquery判斷小數(shù)點(diǎn)兩位和自動(dòng)刪除小數(shù)兩位后的數(shù)字,需要的朋友可以參考下2014-03-03
jquery實(shí)現(xiàn)向下滑出的二級導(dǎo)航下滑菜單效果
這篇文章主要介紹了jquery實(shí)現(xiàn)向下滑出的二級導(dǎo)航下滑菜單效果,涉及jquery實(shí)現(xiàn)頁面結(jié)點(diǎn)樣式動(dòng)態(tài)變換效果的實(shí)現(xiàn)技巧,非常具有實(shí)用價(jià)值,需要的朋友可以參考下2015-08-08
jquery ready函數(shù)、css函數(shù)及text()使用示例
想必大家對jquery的ready函數(shù)、css函數(shù)、text()并不陌生吧,其實(shí)很好理解的,接下來有個(gè)不錯(cuò)的示例,如果你對此理解還是很模糊可以參考下2013-09-09
jQuery的實(shí)現(xiàn)原理的模擬代碼 -4 重要的擴(kuò)展函數(shù) extend
在上兩篇文章中,我們看到每次要通過 jQuery 的原型增加共享方法的時(shí)候,都需要通過 jQuery.fn 一個(gè)個(gè)進(jìn)行擴(kuò)展,非常麻煩.2010-08-08
從重置input file標(biāo)簽中看jQuery的 .val() 和 .attr(“value”) 區(qū)別
這篇文章主要介紹了從重置input file標(biāo)簽中看jQuery的 .val() 和 .attr(“value”) 區(qū)別 的相關(guān)資料,非常不錯(cuò)具有參考借鑒價(jià)值,需要的朋友可以參考下2016-06-06

