В AS2, как объединить имена переменных?

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

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

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

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

1 ответ

Решение

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

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

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

msgstr "распечатать трассировку для члена с именем"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 неправильно то, что они не обращаются к массиву, а создают его:

// 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"];

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

Другие вопросы по тегам