L'objet existe dans une certaine portée, vous pouvez donc presque toujours accéder à la variable via cette syntaxe:
var objname = "myobject";
containing_scope_reference[objname].some_property = 'some value';
Le seul endroit où cela devient délicat est lorsque vous êtes dans une portée fermée et que vous souhaitez accéder à une variable locale de niveau supérieur. Lorsque vous avez quelque chose comme ça:
(function(){
var some_variable = {value: 25};
var x = "some_variable";
console.log(this[x], window[x]); // Doesn't work
})();
Vous pouvez contourner cela en utilisant à la evalplace pour accéder à la chaîne de portée actuelle ... mais je ne le recommande pas à moins que vous n'ayez fait beaucoup de tests et que vous savez que c'est la meilleure façon de faire 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 d'avoir une référence à un nom dans un objet qui va toujours être là (comme thisdans la portée globale ou une variable de premier niveau privée dans une portée locale) et d'y 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]
})();
alert(this === window).