Задайте имя динамической переменной в ActionScript 3.0

Мне нужно установить имя пользовательской переменной для каждой итерации. Почему это невозможно?

for (var i:uint = 0; i < 50; i++)
{
   var ['name' +i] = new Sprite();
}
*//1840: Syntax error: expecting identifier before left bracket*

3 ответов


вы хотите использовать хэш-карту для этого.

var map:Object = {};
for (var i:uint = 0; i < 50; i++)
{
   map['name' +i] = new Sprite();
}

в противном случае вы путаете компилятор. Динамические имена локальных переменных не допускаются.


есть своего рода способ обойти это, в зависимости от того, что вы делаете. Если все эти клипы добавлены в stage, вы можете использовать метод getChildByName для доступа к ним. Ваша настройка будет выглядеть примерно так:

var clips:Array = [];

for (var i:int = 0; i < 100; i++) {
    clips[i] = new MovieClip();
    clips[i].name = "clip" + i;
    addChild(clips[i]);
}

trace (getChildByName("clip2")); // traces [object MovieClip]

это делается путем запроса API отображения, поэтому вы не можете использовать getChildByName для чего-либо, что не добавлено в список отображения где-либо.

надеюсь, что это поможет!


хотя не рекомендуется, поскольку динамические классы медленнее, чем запечатанные классы, вы можете сделать класс динамическим, а затем использовать это["varname"] для установки переменной. Вам нужно указать класс как динамический даже при расширении динамического класса, такого как Movieclip (подклассы не наследуют это).

dynamic public class MyClass{
....
....
....
for (var i:uint = 0; i < 50; i++)
{
   this['name' +i] = new Sprite();
}