AS3:调用静态类方法 - 类和方法名称是字符串

时间:2010-01-11 22:55:59

标签: flex flash actionscript-3

我有一个丑陋的问题。我有两个字符串变量(className和staticMethod)存储类的名称,它是我必须调用的静态方法:

package {
 import flash.display.Sprite;
 import flash.utils.getDefinitionByName;
 import flash.utils.getQualifiedClassName;

 public class ClassPlay extends Sprite {

  public function ClassPlay() {
   new Foo();
   var className:String = 'Foo';
   var staticMethod:String = 'bar';
   var classClass:Class = getDefinitionByName(className) as Class;
   try {
    classClass[staticMethod]();
   } catch (e:Error) {}
  }
 }
}

这是主题类:

package {
 public class Foo {
  public static function bar():void {trace('Foo.bar() was called.');}
 }
}

它完美无缺。当你注释掉这个(第9行)时的问题:

// new Foo();

如果没有这一行,它会以例外情况退出:

ReferenceError: Error #1065: Variable Foo is not defined.

如果没有实例化,我怎么能这样做?如果这是不可能的,有没有办法从字符串变量实例化类?或者,如果这仍然是一个不好的做法,你会怎么做? (我必须使用那两个未知的字符串变量。)

提前致谢。

2 个答案:

答案 0 :(得分:8)

原因是编译器会删除不必要的类 - 如果你没有在某个地方明确引用类Foo,它将不会出现在你的最终应用程序中。

你可以在其他地方引用它并仍然强制它被加载 - 例如,对类的引用的静态数组。

答案 1 :(得分:0)

如果你只是引入一个跟踪(classClass)它应该可以工作 - 如果我能正确记住这些内容,它应该为你提供所需的引用。