Об’єкт існує в певному обсязі, тому ви майже завжди можете отримати доступ до змінної за допомогою цього синтаксису:
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).