Объект существует в некоторой области, поэтому вы почти всегда можете получить доступ к переменной с помощью этого синтаксиса:
var objname = "myobject";
containing_scope_reference[objname].some_property = 'some value';
Единственное место, где это становится сложным, - это когда вы находитесь в закрытой области и вам нужен доступ к локальной переменной верхнего уровня. Когда у вас что-то вроде этого:
(function(){
var some_variable = {value: 25};
var x = "some_variable";
console.log(this[x], window[x]);
})();
Вы можете обойти это, используя evalвместо этого для доступа к текущей цепочке областей видимости ... но я не рекомендую это делать, если вы не провели много тестирования и не знаете , что это лучший способ действовать.
(function(){
var some_variable = {value: 25};
var x = "some_variable";
eval(x).value = 42;
console.log(some_variable);
})();
Ваш лучший выбор должен иметь ссылку на имя в постоянно продолжающийся-к-быть-там объекта (например , thisв глобальном масштабе или частной переменной верхнего уровня в локальной области) и поставить все еще там.
Таким образом:
var my_outer_variable = {};
var outer_pointer = 'my_outer_variable';
(function(){
var my_inner_scope = {'my_inner_variable': {} };
var inner_pointer = 'my_inner_variable';
})();
alert(this === window).