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

时间:2013-04-21 09:40:30

标签: actionscript-3

假设我有一个 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');
    }
}

我的问题:我可以以某种方式避免切换并调用子菜单的函数init()动态地根据sMenu设置的内容吗? 像eval(sMenu+'.init()');

这样的东西

感谢提示!

2 个答案:

答案 0 :(得分:1)

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

var ClassReference:Class = getDefinitionByName(sMenu) as Class;

但是,您不会确切地知道ClassReference的确切类型,因此不知道它是否有init方法。

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

ClassReference.init();

答案 1 :(得分:1)

如果您的子菜单类始终实现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);