Flex / Actionscript: динамический доступ к статической переменной - PullRequest
2 голосов
/ 19 января 2009

Допустим, у меня есть класс Foo:

public class Foo
{

   public static var bar:String = "test";

}

Как я могу ссылаться на панель во время выполнения, используя строку "Foo" или / и и экземпляр Foo и строку "bar"?

т.е.

var x:Object = new Foo();
...
x["bar"]

... не работает, режим отладки в IntelliJ возродил меня, так как bar отображается как свойство.

Обновление:

Обратите внимание, что в момент действия я ничего не знаю о foo во время компиляции. Мне нужно разрешить Foo.bar через строки "Foo" и "bar".

Другими словами, поскольку у flex нет eval, как я могу сделать то же самое, что и eval ("Foo.bar")?

Ответы [ 2 ]

6 голосов
/ 19 января 2009

Это статическая переменная, поэтому вы не сможете получить к ней доступ, используя экземпляр из foo; доступ к нему осуществляется статически с использованием нотации ClassName.variableName, например:

следа (Foo.bar);

// выход: "тест"

Кроме того, поскольку вы объявили Foo и bar открытыми, вы сможете получить доступ к Foo.bar таким образом из любой точки вашего приложения.


Обновление : Ах, я понимаю, что вы спрашиваете. Вы можете использовать flash.utils.Summary.getDefinitionByName ():

// Either this way
trace(getDefinitionByName("Foo").bar);

// Or this
trace(getDefinitionByName("Foo")["bar"]);

... последнее благодаря ответу Джереми, который был для меня новым. :)

4 голосов
/ 19 января 2009

"bar" является статической переменной, поэтому вам нужно обращаться к ней через класс, а не через экземпляр класса.

trace(Foo.bar); // "test"

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

trace(Foo["bar"]); // "test"
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...