假设我有一个Foo类:
public class Foo
{
public static var bar:String = "test";
}
如何使用字符串“Foo”或/和Foo的实例以及字符串“bar”在运行时引用bar?
即。
var x:Object = new Foo();
...
x["bar"]
...不起作用,IntelliJ中的调试模式得到了我的希望,因为bar被列为属性。
更新
请注意,在“操作点”,我对编译时的foo一无所知。我需要通过字符串“Foo”和“bar”来解析Foo.bar。
换句话说,因为flex没有eval我怎么能和eval(“Foo.bar”)一样完成?
答案 0 :(得分:6)
这是一个静态变量,因此您将无法使用foo的实例访问它;它使用ClassName.variableName表示法静态访问,如下所示:
迹(Foo.bar);
// yield:“test”
同样,因为您已将Foo和bar声明为public,所以您应该可以从应用程序的任何位置以这种方式访问Foo.bar。
更新:啊,我明白了你在问什么。您可以使用flash.utils.Summary.getDefinitionByName():
// Either this way
trace(getDefinitionByName("Foo").bar);
// Or this
trace(getDefinitionByName("Foo")["bar"]);
......后者归功于Jeremy的回答,这对我来说是个新鲜事。 :)
答案 1 :(得分:4)
“bar”是一个静态变量,因此您需要通过类而不是类的实例来访问它。
trace(Foo.bar); // "test"
如果通过动态访问变量,您的意思是使用字符串名称访问它,那么您也希望通过该类来执行此操作。
trace(Foo["bar"]); // "test"