2009-11-03 14 views
6

Quando si esegue:window.toString.call non è definito in IE8

window.toString.call("") 

tutto bene in FF/CH, ma in IE8 si ottiene un errore di script. Analizzando un po 'di più si è scoperto che window.toString.call non è definito in IE8?

è anche possibile eseguire questo:

window.toString instanceof Function; 
// false 

alert(window.toString); 
// function toString() { 
// [native code] 
// } 

Perché è questo e come risolverlo? E ho iniziato a chiedermi come mai jQuery funziona in primo luogo?

+0

Per inciso, quando eseguo 'window.toString.call (" ")' su Firefox restituisce 'null'. Inoltre, 'Object.prototype.toString.call (" ")' restituisce la stringa '[object String]', che è praticamente come previsto. Potrebbe aiutare a spiegare quello che stai effettivamente cercando di fare. – NickFitz

risposta

14

window è un oggetto host e lo ECMAScript Language Specification (3rd edition) non richiede che gli oggetti host siano derivati ​​dall'oggetto nativo Object. In IE (e probabilmente in alcuni altri browser) gli oggetti host non lo sono, quindi non supportano nessuno dei metodi o delle proprietà native (sebbene possano avere metodi o proprietà con lo stesso nome di metodi o proprietà nativi accessibili a script).

Se tutto ciò che si desidera è ottenere il metodo nativo predefinito dell'implementazione linguistica toString, è necessario utilizzare Object.prototype.toString.call("").

+0

Ottima risposta @NickFitz, grazie ... –

1

NickFitz è corretta, il metodo toString sull'oggetto host che si stanno trovando è puramente in modo che se avete fatto

avviso (finestra);

si otterrebbe il testo [oggetto]

Tutto quello che il metodo toString() di JavaScript utilizzato nei tuoi esempi sarebbero acheive è quello di fare una stringa da una stringa in modo che il modo corretto di fare ciò che si sta cercando è;

var a =new String (""); 

o semplicemente

var b = ""; 

o se si vuole veramente essere sciocco;

var b = "".toString(); 
+1

Astenersi dal riferirsi ad altre risposte come "sopra" o "sotto" poiché la posizione di una risposta dipende dall'ordinamento selezionato e dal conteggio dei voti in quel momento. Cerca di fornire invece il permalink della risposta. Penso che tu possa persino usare solo l'ancora invece di un URL assoluto. Ad esempio, [1]: # 1669142 –

+0

Fantastico, fatto. –