2010-05-04 31 views
14

¿Hay alguna manera de que javascript detecte todas las variables asignadas? Por ejemplo, si un archivo js crea un grupo de vars (ámbito global), ¿puede un archivo subsiguiente obtener todos los vars sin saber a qué se llama y cuáles podrían existir?¿Obtener todas las variables de Javascript?

Gracias de antemano :)

EDITAR, Pregunta Parte 2:

¿Cómo puedo obtener los valores de estas variables? Esto es lo que he intentado:

Esto es lo que terminó con, según las sugerencias de comentarios:

for (var name in this) { 
    variables[name] = name; 
    variables[name]=this[name] 
} 
+0

Creo que necesita 'variables [nombre] = este [nombre]' allí. –

+0

Gracias, puedo alertar usando la variable c usando: alerta (variables.c); – Matrym

Respuesta

22

"JavaScript - La guía definitiva" de Flanagan da el siguiente en la página 653:

var variables = "" 
for (var name in this) 
    variables += name + "\n"; 
+0

Da algunas cosas adicionales, presumiblemente desde el navegador, ¡pero funciona! Gracias :) – Matrym

+0

Uh. Lo siento, pero ¿podría ayudarme a comprender cómo obtener los valores de cada una de estas variables ahora? Agregué código a lo que intenté ... – Matrym

+0

El "nombre" es como una clave en un hash "this". Obtenga el valor con este [nombre]. – wombleton

2

Para Firefox, puede ver la pestaña DOM - fácil, aunque no una respuesta a su pregunta.

El for in loop proporcionado en la respuesta de Kinopiko funcionará, pero no en IE. Más se explica en el artículo vinculado a continuación.

Para IE, utilice RuntimeObject.

if(this.RuntimeObject){ 
    void function() { 
     var ro = RuntimeObject(), 
      results = [], 
      prop; 
     for(prop in ro) { 
      results.push(prop); 
     } 
     alert("leaked:\n" + results.join("\n")); 
    }(); 
} 

Consulte también:

+0

Hola Garrett. He editado tu respuesta para agregar el formato del código al ejemplo 'RuntimeObject'. –

+0

Thx Tim, ¡muy útil! – Cody

1

No es la variable this. Se trata de un objeto o una matriz, y se puede poner simplemente:

for(i in this) { //do something } 

Desafortunadamente, devolverá todo lo bajo el objeto this.

Cuestiones relacionadas