मैं objtypeof
एक चर obj कुछ भी हो सकता है, और मैं अगर obj एक समारोह है पता लगाने के लिए चाहते हैं। आम तौर पर मैं क्या करना होगा
typeof obj === 'function'
समस्या आईई < = 8 में है जब obj एक देशी समारोह (कम से कम यह window.open और window.alert के साथ होता है पता है) है। आईई टाइपऑफ ओबीजे में जब ऑब्जेक्ट होता है window.open === 'ऑब्जेक्ट'
क्या यह जांचने का एक विश्वसनीय तरीका है कि window.open वास्तव में एक फ़ंक्शन है या नहीं?
मैं jQuery देखना भी इस
$.isFunction(window.open) => false //in IE
पर विफल रहता है इस apperantly jQuery 1.3 या कुछ और, यकीन नहीं कि वे किस तरह यह है कि पहले परीक्षण किया में हटा दिया गया।
जोड़ा गया: एक तरह से यदि यह एक त्रुटि फेंक नहीं है तो विंडो खुली एक समारोह है
Function.prototype.apply.apply(window.open)
कॉल करने के लिए होने लगते हैं। यदि आप
Function.prototype.apply.apply({})
फिर आईई एक त्रुटि "फंक्शन अपेक्षित" फेंकता है।
if (window.open) {
window.open(...)
}
किसी देशी अधिलेखित कर देता है, तो: लेकिन यह शायद ही यदि किसी वैरिएबल एक समारोह है की जाँच करने के लिए एक विंडो खोलने के लिए एक अच्छा समाधान ..
तो यह आईई में मूल कार्यों के लिए सिर्फ एक मुद्दा है जो टाइपिंग ऑब्जेक्ट लौटा रहा है, लेकिन उपयोगकर्ता परिभाषित फ़ंक्शन टाइपिंग फ़ंक्शन लौट रहे हैं? यह जांचने के लिए पर्याप्त क्यों नहीं है कि मूल कार्य मौजूद है i.e 'window.open! == अपरिभाषित'? आपको मूल कार्यों की आवश्यकता क्यों है, जिन्हें ऐसा करने के लिए दस्तावेज किया गया है? क्षमा करें बस अपनी विचार प्रक्रिया को समझने की कोशिश कर रहा है। – Scott
@ 1.2 और "फ़ंक्शन" शाब्दिक के लिए इसका परीक्षण देखें; http://code.google.com/p/jqueryjs/downloads/detail?name=jquery-1.2.js –
^@ एलेक्सके के लिंक से प्रासंगिक कोड 'वापसी !! fn && typeof fn! = "string" && ! fn.nodeName && fn.constructor! = ऐरे && /function/i.test (fn + ""); 'जहां fn फ़ंक्शन नाम – Scott