el objeto existe en un cierto margen, por lo que casi siempre se puede acceder a la variable a través de esta sintaxis :
var objname = "myobject";
containing_scope_reference[objname].some_property = 'some value';
El único lugar donde esto se pone complicado es cuando se encuentra en un ámbito cerrado y desea acceder a una variable local de nivel superior. Cuando se tiene algo como esto:
(function(){
var some_variable = {value: 25};
var x = "some_variable";
console.log(this[x], window[x]); // Doesn't work
})();
Usted puede moverse por que mediante el uso eval
en lugar de acceder a la cadena de ámbito actual ... pero no lo recomendaría a menos que usted ha hecho un montón de pruebas y usted sabe que esa es la mejor manera de hacer las cosas.
(function(){
var some_variable = {value: 25};
var x = "some_variable";
eval(x).value = 42;
console.log(some_variable); // Works
})();
Su mejor apuesta es tener una referencia a un nombre en una siempre-va-a-ser-ahí objeto (como this
en el ámbito global o una variable de nivel superior privada en un ámbito local) y poner todo más allí.
Por lo tanto:
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]
})();
@Shaz: Ha! ¿Qué tan inteligente ... – PeeHaa
@Shaz - ambos hacen referencia al mismo alcance en realidad ;-) (Asumiendo que se ejecutan en un navegador) 'alerta (esta === ventana)'. –
@Sean: Ellos son. Y lo hacen? – PeeHaa