404 votes

Utiliser des noms de variables dynamiques en JavaScript

En PHP, vous pouvez faire des choses étonnantes/horribles comme ceci :

Est-il possible de faire quelque chose comme ça avec Javascript ?

Par exemple si j’ai un obtenir une référence à la variable avec le nom ?

395voto

jAndy Points 93076

Depuis ECMA-/Javascript est tout à propos de Objects et Contexts (qui sont aussi somekind de l'Objet), chaque variable est stockée dans un tel appelée Variable (ou, dans le cas d'une Fonction, l' Activation de l'Objet).

Donc, si vous créez des variables comme ceci:

var a = 1,
    b = 2,
    c = 3;

Dans la portée Globale (= AUCUNE fonction du contexte), vous implicitement écrire ces variables dans l' objet Global (= window dans un navigateur).

Ceux-ci peuvent obtenir accessibles à l'aide de la "dot" ou "support" de la notation:

var name = window.a;

ou

var name = window['a'];

Cela ne fonctionne que pour l'objet global dans ce cas particulier, parce que la Variable d'Objet de l' Objet Global est l' window objet lui-même. Dans le Contexte d'une fonction, vous n'avez pas un accès direct à l' Activation de l'Objet. Par exemple:

function foobar() {
   this.a = 1;
   this.b = 2;

   var name = window['a']; // === undefined
   alert(name);
   name = this['a']; // === 1
   alert(name);
}

new foobar();

new crée une nouvelle instance d'un objet défini (contexte). Sans new de la portée de la fonction sera également global (=fenêtre). Cet exemple serait d'alerte undefined et 1 respectivement. Si l'on remplacerait this.a = 1; this.b = 2 avec:

var a = 1,
    b = 2;

À la fois alerte sorties serait pas défini. Dans ce scénario, les variables a et b seraient stockés dans l'Activation de l'Objet à partir d' foobar, nous ne pouvons pas accès (bien sûr, nous pourrions accéder à ceux-ci directement en appelant a et b).

164voto

erickb Points 2248

``est une option.

103voto

JohnP Points 29302

vous pouvez utiliser l’objet window pour mettre au travail.

``

Fenêtre a une référence à toutes les variables globales et fonctions globales que vous utilisez.

28voto

amitchd Points 690
<pre><code></code><p>Essayez ceci...</p></pre>

0voto

Alfgaar Points 72

ce qu’ils signifient, c’est non, vous ne pouvez pas. Il n’y a aucun moyen de le faire. Il a été possible, vous pourriez faire quelque chose comme ça

ayant une fonction de création, tout comme celui implémenté dans ECMAScript 5.

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X