2010-05-04 9 views
14

Y a-t-il un moyen pour javascript de détecter toutes les variables assignées? Par exemple, si un fichier js crée un tas de vars (globalement étendu), un fichier suivant peut-il obtenir toutes les vars sans connaître leur nom et qui peut exister?Obtenez toutes les variables Javascript?

Merci à l'avance :)

EDIT, Question Partie 2:

Comment puis-je obtenir les valeurs de ces variables? Voici ce que j'ai essayé:

C'est ce que j'ai fini avec, selon les suggestions de commentaires:

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

Je pense que vous avez besoin de 'variables [nom] = ce [nom]' là. –

+0

Merci, je suis capable d'alerter en utilisant la variable c en utilisant: alert (variables.c); – Matrym

Répondre

22

"Le JavaScript - Le Guide définitif" de Flanagan donne ce qui suit à la page 653:

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

Donne des trucs supplémentaires, probablement à partir du navigateur, mais ça marche! Merci :) – Matrym

+0

Uh. Désolé, mais pourriez-vous m'aider à comprendre comment obtenir les valeurs de chacune de ces variables maintenant? J'ai ajouté du code à ce que j'ai essayé .. – Matrym

+0

Le "nom" est comme une clé dans un "this" hash. Obtenez la valeur par ce [nom]. – wombleton

2

Pour Firefox, vous pouvez voir l'onglet DOM - facile, mais pas une réponse à votre question.

La boucle for in fournie dans la réponse de Kinopiko fonctionnera, mais pas dans IE. Plus est expliqué dans l'article lié ci-dessous. Pour IE, utilisez le code RuntimeObject.

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

Voir aussi:

+0

Salut Garrett. J'ai modifié votre réponse pour ajouter le formatage de code à l'exemple 'RuntimeObject'. –

+0

Thx Tim, très utile! – Cody

1

Il est la variable this. Ceci est un objet ou un tableau, et vous pouvez tout simplement:

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

Malheureusement, il retournera tout sous l'objet this.

Questions connexes