代码之家  ›  专栏  ›  技术社区  ›  itarato Randy Sugianto 'Yuku'

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

  •  8
  • itarato Randy Sugianto 'Yuku'  · 技术社区  · 16 年前

    我有个难看的问题。我有两个字符串变量(class name和static method)存储类的名称,这是我必须调用的静态方法:

    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 回复  |  直到 16 年前
        1
  •  8
  •   Anon.    16 年前

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

    您可以在其他地方引用,但仍然强制加载它——例如,对类的静态引用数组。

        2
  •  0
  •   Myk    16 年前

    如果你只输入一个跟踪(classclass),它就可以工作了——如果我正确地记住了这些东西,它就可以提供你需要的参考。