Ho una variabile objtypeof in IE <= 8 per funzioni native
obj può essere qualsiasi cosa, e voglio rilevare se obj è una funzione. Normalmente farei
typeof obj === 'function'
Il problema è in IE < = 8 quando obj è una funzione nativa (almeno so accade con window.open e window.alert). In IE typeof obj quando object is window.open === 'object'
Esiste un modo affidabile per verificare se window.open è effettivamente una funzione o no?
vedo jQuery fallisce anche in questo
$.isFunction(window.open) => false //in IE
questo apperantly ottenuto rimosso in jQuery 1.3 o qualcosa, non so come hanno testato prima di quello.
Aggiunto: Un modo sembra essere di chiamare
Function.prototype.apply.apply(window.open)
Se questo non genera un errore, allora la finestra aperta è una funzione. Se si utilizza
Function.prototype.apply.apply({})
Quindi IE genera un errore "Funzione prevista". Ma non è certo una buona soluzione per aprire una finestra per controllare se una variabile è una funzione ..
Quindi questo è solo un problema per le funzioni native in IE restituendo il tipo di oggetto, ma le funzioni definite dall'utente restituiscono il tipo di funzione? Perché non è sufficiente controllare che esista la funzione nativa i.e 'window.open! == undefined'? Perché hai bisogno delle funzioni native, che sono documentate per fare questo? Mi spiace solo cercando di capire il tuo processo di pensiero. – Scott
Dai uno sguardo a @ 1.2 e il suo test per la "funzione" letterale; http://code.google.com/p/jqueryjs/downloads/detail?name=jquery-1.2.js –
^Codice pertinente da @ AlexK.'s link 'return !! fn && typeof fn! =" string "&& ! fn.nodeName && fn.constructor! = Array && /function/i.test (fn + ""); 'dove fn è il nome della funzione – Scott