Допустим, у меня есть класс Foo:
public class Foo
{
public static var bar:String = "test";
}
Как я могу ссылаться на панель во время выполнения, используя строку «Foo» или / и, а также экземпляр Foo и строку «bar»?
Т.е.
var x:Object = new Foo();
...
x["bar"]
... не работает, режим отладки в IntelliJ вызвал у меня надежду, поскольку панель указана как свойство.
Обновлять:
Обратите внимание, что в «точке действия» я ничего не знаю о foo во время компиляции. Мне нужно разрешить Foo.bar через строки «Foo» и «bar».
Иными словами, поскольку у flex нет eval, как я могу выполнить то же самое, что и eval ("Foo.bar")?





Это статическая переменная, поэтому вы не сможете получить к ней доступ, используя пример из 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"]);
... последнее благодаря ответу Джереми, который был для меня новым. :)
«bar» - это статическая переменная, поэтому вам нужно обращаться к ней через класс, а не через экземпляр класса.
trace(Foo.bar); // "test"
Если под динамическим доступом к переменной вы имеете в виду доступ к ней с помощью строкового имени, то вы также хотите сделать это через класс.
trace(Foo["bar"]); // "test"
Хорошо - я не знал, что на него также можно ссылаться как на Foo ["bar"].
Ах, теперь я понимаю, что вы имеете в виду. Я обновил свой ответ ниже.