Comment accéder dynamiquement à une variable à l'intérieur d'une fonction / fermeture anonyme?

StackOverflow https://stackoverflow.com/questions/4907111

Question

Pour garder l'espace de noms global propre, mon code JavaScript est encapsulé comme ceci:

(function() {
    /* my code */
})();

Maintenant, j'ai quelques variables déclarées dans cette portée auxquelles je veux accéder en utilisant un nom de variable variable (par exemple, le nom est 'something' + someVar). Dans le cadre global, j'utiliserais simplement window['varname'], mais évidemment cela ne fonctionne pas.

Y a-t-il un bon moyen de faire ce que je veux?Sinon, je pourrais simplement mettre ces variables dans un objet pour utiliser la notation tableau ...

Remarque: eval('varname') n'est pas une solution acceptable.Alors, ne suggérez pas cela.

Était-ce utile?

La solution

C'est une bonne question car this ne pointe pas vers la fonction anonyme, sinon vous utiliseriez évidemment simplement this['something'+someVar].Même l'utilisation du arguments.callee obsolète ne fonctionne pas ici car les variables internes ne sont pas des propriétés de la fonction.Je pense que vous devrez faire exactement ce que vous avez décrit en créant soit un objet porteur ...

(function() {
  var holder = { something1: 'one', something2: 2, something3: 'three' };

  for (var i = 1; i <= 3; i++) {
    console.log(holder['something'+i]);
  }
})();

Autres conseils

(function(globals) {
    /* do something */
    globals[varname] = yourvar;
})(yourglobals);

Solution maléfique / hack: Mettez la variable dont vous avez besoin dans un objet d'aide obj et évitez d'avoir à changer les usages actuels en notation par points en utilisant use with (obj) { votre code actuel ...}

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top