Je suis en train de retirer la plupart des globals de mon code en entourant tout dans une fonction, en transformant les globals en "pseudo globals", qui sont tous accessibles de n'importe où à l'intérieur de ce bloc fonctionnel.Accéder à "pseudo-globaux" par leur nom comme une chaîne
(function(){
var g = 1;
var func f1 = function() { alert (g); }
var func f2= function() { f1(); }
})();
(techniquement c'est seulement pour ma version « release », où j'ajouter tous mes fichiers ensemble dans un seul fichier et les entourer de ce qui précède .... ma version dev a encore généralement un mondial par js fichier)
Tout cela fonctionne bien, sauf pour une chose ... il y a un endroit important où j'ai besoin d'accéder à certains de ces "globals" par le nom de la chaîne. Auparavant, je aurais pu faire ceci:
var name = "g";
alert (window[name]);
et il a fait la même chose que
alert(g);
maintenant - à l'intérieur du bloc - Je voudrais faire la même chose, sur mes pseudo-GLOBALS . Mais je ne peux pas, car ils ne sont plus membres d'un objet parent ("fenêtre"), même si elles sont dans la portée.
Un moyen d'y accéder par chaîne?
Merci ...
Ahh, oui, eval. Je ne sais pas pourquoi je n'y ai pas pensé.Mais oui, je ne pense pas que je veuille y aller. :) – rob
Y at-il une raison pour laquelle il ne peut pas simplement nommer la fonction qu'il utilise pour envelopper le code, puis accéder au "global" en tant que membre de cet objet? C'est ce que je suggère dans ma réponse, je suis juste curieux de savoir s'il y a quelque chose qui me manque que vous pourriez expliquer. – MisterMister
@MisterMister: Cela peut très bien être une bonne approche, en fonction des spécificités de son code, comment il est structuré, et exactement pourquoi il doit accéder à un global par un nom de chaîne, et combien refactoring serait nécessaire pour faire cette approche fonctionne. Sans ces détails, je ne sais pas vraiment ce qui serait le mieux, bien que votre réponse soit en général une bonne approche. –