可變物鏡可以是任何東西,我想檢測如果obj的函數。通常情況下,我會做
typeof obj === 'function'
的問題是在IE < = 8時obj是一個本地函數(至少知道它window.open和window.alert發生)。在IE中typeof obj當對象是window.open時==='object'
有沒有一種可靠的方法來檢查window.open是否實際上是一個函數呢?
我看到的jQuery也沒有對這個
$.isFunction(window.open) => false //in IE
這apperantly得到了jQuery的1.3或東西,不知道他們在此之前,如何測試它刪除。
補充: 一種方式似乎是叫
Function.prototype.apply.apply(window.open)
如果這不會引發錯誤,則窗口打開是一個函數。如果你這樣做
Function.prototype.apply.apply({})
然後IE會拋出一個錯誤「Function expected」。但是,幾乎沒有一個很好的解決方案,以打開一個窗口來檢查變量的函數..
所以這只是本機函數在IE返回typeof對象的問題,但用戶定義函數返回typeof函數?爲什麼只檢查本地函數是否存在,即window.open!== undefined'是不夠的?爲什麼你需要本地函數,這些函數被記錄爲這樣做?對不起,只是想了解你的思維過程。 – Scott
看看@ 1.2及其對「函數」字面值的測試; http://code.google.com/p/jqueryjs/downloads/detail?name=jquery-1.2.js –
^@ AlexK。的相關代碼鏈接'return !! fn && typeof fn!=「string」&& !fn.nodeName && fn.constructor!= Array && /function/i.test(fn +「」);'其中fn是函數名稱 – Scott