假设我有一个 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()');
感谢提示!
答案 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);