Actionscript 2 ориентирован на локальные переменные? - PullRequest
0 голосов
/ 08 марта 2012

Быстрый вопрос относительно области видимости переменной в ActionScript 2.0.Провел сегодня какое-то тестирование и подумал, как бы вы нацелились на локальную переменную функции через конкатенированную строку переменной.

Например:

var txt = "Hello World"; 

function testing(msg) {
    var test1 = msg; 
    trace(this["test"+1]); 
}

testing(txt); 

Я бы ожидал, что трасса будет "Hello World", а вместо этого будет задано "undefined".Итак, если переменные, созданные вне функций, создаются на основной временной шкале, где создаются локальные переменные функции и как вы будете к ним обращаться?

Ответы [ 2 ]

1 голос
/ 08 марта 2012

Переменные, которые вы объявляете внутри функции, не добавляются к объекту this. Вы бы ссылались на них просто по имени переменной:

function testing(msg) {
  var test1 = msg; 
  trace(test1); 
}

Нет другого известного мне способа (кроме eval, и вы обычно этого не хотите) ссылаться на имя локальной переменной с помощью строки, содержащей ее имя.

Если вам нужно как-то ссылаться на него по имени, вам придется поместить его в какой-то другой контейнер. Либо определите локальный объект и сделайте эти переменные его членами, либо сделайте эту функцию методом класса и используйте переменные класса.

1 голос
/ 08 марта 2012

Насколько я помню, ты не можешь.Если у вас есть test1, test2, test3, ... и так далее, почему бы не сделать его массивом с именем test?Тогда вы test[0], test[1], test[2], ....

Если вы должны использовать test1, то один из способов - вставитьобъект.

var obj = {};
obj.test1 = msg;

trace(obj["test" + 1]);
...