2010-01-27 2 views
2

Рабочий пример с глобальной переменной:Как получить локальную переменную по ее имени в JS?

 
var example_var = 'global var example'; 

var x = function(){ 
    var var_name = 'example_var'; 
    alert('Global var value is: ' + window[var_name]); 
} 

Как я могу сделать то же самое с локальной переменной? Как это (не рабочий пример):

 
var x = function(){ 
    var example_var = 'Local var example'; 
    var var_name = 'example_var'; 
    alert('Local var value is: ' + window[var_name]); 
} 
+0

Дубликат: http://stackoverflow.com/questions/39960/javascript-locals –

+0

Почему? Это, как правило, является признаком сложной работы с переменными. – Anonymous

+0

Это чистый пример проблемы. Фактически этот код используется для расширения объектов различными методами, имена которых содержатся в самих объектах. – klesh

ответ

2

Вы не хотите использовать eval; локально область видимости объекта может быть лучшим вариантом:

var x = function(){ 
    var self = {}; 
    self.example_var = 'Local var example'; 

    var var_name = 'example_var'; 

    alert('Local var value is: ' + self[var_name]); 
} 
+0

Это обходное решение (хорошее), но не дает строгого ответа на вопрос. – tokland

-2

возможно:

var x = function(){ 
    var example_var = 'Local var example'; 
    var var_name = example_var; 
    alert('Local var value is: ' + var_name); 
} 

или:

var x = function(){ 
     var example_var = 'Local var example'; 
     window.var_name = example_var; 
     alert('Local var value is: ' + window[var_name]); 
    } 

или

var x = function(){ 
      var var_name = 'Local var example';  
      alert('Local var value is: ' + var_name); 
     } 
+0

Вопрос собирается получить доступ переменная по имени. Ваши примеры: 1) значение var_name - «example_var», а не значение example_var. 2) Все еще var_name содержит имя переменной, а не его значение. 3) нет другой переменной, к которой вы пытаетесь получить доступ. –

5

Если у вас нет другого пути, вы можете попробуйте eval это

var x = function(){ 
    var example_var = 'Local var example'; 
    var var_name = 'example_var'; 
    alert('Local var value is: ' + eval(var_name)); 
} 
-3

В настоящее время существует два решения этой проблемы.
1. Eval(), но я действительно не нравится использовать зло()
2. мы можем изменить объявление переменной от вар к этому:

 
var x = function(){ 
    this.example_var = 'this.var example'; 
    this.var_name = 'example_var'; 
    alert('Local variable value is: ' + this[var_name]); 
} 
+1

Часто 'this' будет эквивалентно' window', чтобы можно было уничтожить глобальные переменные. – Anonymous

Смежные вопросы