В AS2, как объединить имена переменных? - PullRequest
1 голос
/ 27 января 2012

Я пытаюсь перебрать набор текстовых полей, созданных в Flash IDE, и назвал их через панель свойств с именем «dot_text1, dot_text2 и т. Д.). Эти элементы текстового поля вложены в другой мувиклип под названием "букет".

Моя проблема в том, что я пытаюсь перебрать все из них и сохранить их в массиве для последующего использования, но я продолжаю получать неопределенные значения, когда отслеживаю его. Я пишу скрипт в корне файла.

for (var i=0; i <11; i++) {
    trace(["bouquet.dot_text" + i]); 
}

Я явно что-то делаю не так :(. Спасибо.

1 Ответ

3 голосов
/ 27 января 2012

Если вы хотите сохранить все элементы управления в массиве, это должно сделать это:

var inputs = new Array();
for (var i=0; i <11; i++) {
    inputs.push(bouquet["dot_text" + i]);
}

В вашем примере вы говорите:

trace(["bouquet.dot_text" + i])

Что на самом деле говорит

"распечатать трассировку для одноэлементного массива, содержащего текст "quet.dot_text" + i

когда то, что вы хотите сказать, это

"распечатать трассировку для члена с именем" dot_text "+ 1 в объекте с именем букет.

Так что ваш пример, вероятно, должен прочитать примерно так:

for (var i=0; i <11; i++) {
    trace(bouquet["dot_text" + i]); 
}

[править]

ОП выразил недоумение по поводу использования "скобок для объединения имен переменных". Здесь на самом деле происходит довольно интересная особенность семейства языков JavaScript: объекты также являются ассоциативными массивами , поэтому, когда вы объявляете такой объект:

var obj = {member: "value"};
// now, obj.member == "value"

вы также можете обращаться к его переменным-членам, как если бы это был ассоциативный массив:

obj["member"]

Теперь, поскольку вы можете использовать строку, представляющую имя члена, в качестве ключа к массиву, очевидно, вы также можете объединить эту строку, поэтому:

var obj = {member1: "value1", member2: "value2"};
var value1 = obj["member" + 1];
var value2 = obj["member" + 2];

и это, конечно, то, что вы можете сделать с переменной цикла или что у вас есть.

В первоначальном примере OP неправильно то, что они не обращаются к массиву, они создают one:

// this accesses the "member" key in the assoc. array "obj"
var value = obj["member"];
// this creates a new 1-element array containing the string "member"
var array = ["member"];

Таким образом, скобки на самом деле не имеют ничего общего с конкатенацией имен переменных; в одном контексте они обозначают литерал массива, в другом - доступ к массиву. Надеюсь, это немного прояснит ситуацию? : -)

...