Actionscript 3 As3:将类作为参数传递并动态调用静态方法

Actionscript 3 As3:将类作为参数传递并动态调用静态方法,actionscript-3,Actionscript 3,假设我有一个类cMenu,它有一个函数displayMenu()。此函数调用子菜单类中的静态函数init(),具体取决于传递给displayMenu()的内容,如下所示: cMenu.displayMenu('cMenuMain'); public class cMenu { public static function displayMenu(sMenu:String):void{ switch(sMenu) { case 'cMenu

假设我有一个类cMenu,它有一个函数displayMenu()。此函数调用子菜单类中的静态函数init(),具体取决于传递给displayMenu()的内容,如下所示:

cMenu.displayMenu('cMenuMain');

public class cMenu
{   
    public static function displayMenu(sMenu:String):void{

        switch(sMenu) {
            case 'cMenuMain':
                cMenuMain.init();
                break;
            case 'cMenuHighscore':
                cMenuHighscore.init();
                break;
        }

    }
}

public class cMenuMain
{   
    public static function init():void{
        trace('cMenuMain');
    }
}
我的问题:我是否可以避免切换,并根据sMenu的设置动态调用子菜单的函数init()? 类似于
eval(sMenu+'.init()')


谢谢你的提示

要通过名称字符串获取类,可以使用
getDefinitionByName
,如下示例:

var ClassReference:Class = getDefinitionByName(sMenu) as Class;
但是,您将不知道您的
ClassReference
是什么类型,因此您甚至不知道它是否有
init
方法

如果您确实知道类型,则可以调用静态方法:

ClassReference.init();

如果您的子菜单类始终实现init方法(您可以使用接口来确保),则可以将目标子菜单类作为参数传递给displayMenu方法

public static function displayMenu(submenuClass:*):void{
 // if you need to perform something here depending on the submenu class
 if (submenuClass is cMenuMain) {
  // do something
 } 
 submenuClass.init()
}

displayMenu(cMenuMain);

当我调用
ClassReference.init()时我得到了错误引用error:error#1065:未定义变量cMenuMain。。但是cMenuMain.init();工作,所以cMenuMain一定在那里。Thx这就是我要找的!这难道不意味着对于所有不同的类,都必须有一个大的if/else语句吗?