L'objet existe dans une certaine étendue, de sorte que vous pouvez presque toujours accéder à la variable par le biais de cette syntaxe:
var objname = "myobject";
containing_scope_reference[objname].some_property = 'some value';
Le seul endroit où ce qui est difficile, c'est quand vous êtes dans un champ d'application restreint et que vous souhaitez accéder à un niveau supérieur de variable locale. Lorsque vous avez quelque chose comme ceci:
(function(){
var some_variable = {value: 25};
var x = "some_variable";
console.log(this[x], window[x]); // Doesn't work
})();
Vous pouvez le contourner en utilisant eval
au lieu d'accéder à l'étendue actuelle de la chaîne ... mais je ne le recommande pas, sauf si vous avez fait beaucoup de tests et vous savez que c'est la meilleure façon d'aborder les choses.
(function(){
var some_variable = {value: 25};
var x = "some_variable";
eval(x).value = 42;
console.log(some_variable); // Works
})();
Votre meilleur pari est de disposer d'une référence à un nom dans un toujours-va-à-être-là de l'objet (comme this
dans la portée globale ou privé de haut niveau variable dans une portée locale) et mettre tout le reste.
Donc:
var my_outer_variable = {};
var outer_pointer = 'my_outer_variable';
// Reach my_outer_variable with this[outer_pointer]
// or window[outer_pointer]
(function(){
var my_inner_scope = {'my_inner_variable': {} };
var inner_pointer = 'my_inner_variable';
// Reach my_inner_variable by using
// my_inner_scope[inner_pointer]
})();