2009-11-03 16 views
6

Cuando se ejecuta:window.toString.call no está definido en IE8

window.toString.call("") 

todo está bien en FF/CH pero en IE8 se obtiene un error de script. Investigando un poco más resultó que window.toString.call no está definido en IE8?

También puede ejecutar la siguiente:

window.toString instanceof Function; 
// false 

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

¿Por qué es esto y cómo solucionarlo? Y empecé a preguntarme cómo es que jQuery funciona en primer lugar.

+0

Por cierto, cuando hago 'window.toString.call (" ")' en Firefox, devuelve 'null'. Además, 'Object.prototype.toString.call (" ")' devuelve la cadena '[object String]', que es prácticamente como se esperaba. Puede ser útil explicar lo que en realidad estás tratando de hacer. – NickFitz

Respuesta

14

window es un objeto host, y ECMAScript Language Specification (3rd edition) no requiere que los objetos host se deriven del objeto nativo Object. En IE (y probablemente en algunos otros navegadores) los objetos host no lo son, por lo que no admiten ninguno de los métodos o propiedades nativos (aunque pueden tener métodos o propiedades con los mismos nombres que los métodos o propiedades nativos a los que se puede acceder). guiones).

Si todo lo que desea es apropiarse del método nativo toString predeterminado de la implementación del idioma, entonces debe usar Object.prototype.toString.call("").

+0

Gran respuesta @NickFitz, gracias ... –

1

NickFitz es correcta, el método toString en el objeto host que se está encontrando es puramente de manera que si se hizo

alerta (ventana);

que se obtendría el texto [objeto]

Todo lo que el método toString() de JavaScript usado en sus ejemplos se acheive es hacer una cadena de una cadena por lo que la forma correcta de hacer lo que está tratando es;

var a =new String (""); 

o simplemente

var b = ""; 

o si realmente quiere ser tonto;

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

Evite referirse a otras respuestas como "arriba" o "abajo" ya que la posición de una respuesta depende de la clasificación seleccionada y el conteo de votos en ese momento. Intente proporcionar el enlace permanente de la respuesta en su lugar. Creo que incluso puedes usar solo el ancla en lugar de una URL absoluta. Por ejemplo, [1]: # 1669142 –

+0

Genial, hecho eso. –