Преобразовать строку в имя экземпляра объекта - PullRequest
1 голос
/ 16 июня 2011

Я пытаюсь превратить строку в имя экземпляра.

stage.focus = ["box_"+[i+1]];

это возвращает мне = box_2;

но мне нужно, чтобы это был объект, а не строка.

В as2 я мог бы использовать eval. Как мне сделать это в as3?

Ответы [ 3 ]

9 голосов
/ 16 июня 2011

Правильный синтаксис:

this["box_"+(i+1)]
2 голосов
/ 16 июня 2011

Например, если вы хотите вызвать функцию «start» в своем основном классе, вы должны сделать это следующим образом:

this["start"]();

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

package{
    import flash.display.Sprite;
    public class Main extends Sprite{
        public var button:Sprite;

        public function Main(){
            trace(this["button"]);
        }
    }
}

Будет выводить:

[object Sprite]
0 голосов
/ 16 июня 2011

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

Например:

private function foo():void {
    var box_2:Sprite;
    trace(this["box_"+(i+1)]);
}

Не сработает, потому что box_2 не является частью класса. В этом случае настоятельно рекомендуется использовать массив.

Если вы хотите получить доступ к DisplayObject (например, Sprite или MovieClip), вы также можете использовать getChildByName . Но в этом случае box_2 будет именем объекта вместо имени переменной . Вы устанавливаете имя как

var box:Sprite;
box.name = "box_2";

Но опять же, я рекомендую массив.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...