2016-11-11 47 views
0

我一直在努力改进我经常使用的代码,并想知道是否有一种简单的方法来实现这一点。AS3 - 动态初始化对象

我有一个导航类,它定义构造函数之前的对象(private var exampleScreen:ExampleScreen;)。

基于ChangeScreenTo函数(destinationScreen:String)的字符串依赖项注入,是否可以获取已定义的屏幕并动态地初始化它(exampleScreen = new ExampleScreen();)? 无论哪种方式,没有人有比这更好的建议或我目前的switch语句的解决方案吗?

示例代码:

package{ 
    public class ScreenController extends MovieClip { 
     private var currentScreen: DisplayObject; 
     //SCREENS 
     private var exampleScreen1:ExampleScreen1; 
     private var exampleScreen2:ExampleScreen2; 
     ... 
     public function ScreenController() { 
      ... 
     } 
     public function ChangeScreenTo(desinationScreenName: String) { 
      //REMOVE CURRENT SCREEN 
      if (currentScreen != null) { 
       removeChild(currentScreen); 
       currentScreen = null; 
      } 
      switch (destinationScreenName) { 
       case "exampleScreen1": 
        exampleScreen1 = new ExampleScreen1(); 
        break; 
       case "exampleScreen2": 
        exampleScreen2 = new ExampleScreen2(); 
        break; 
       ... 
      } 
      mcDestinationScreen = this[(destinationScreenName)]; 
      addChild(mcDestinationScreen); 
      currentScreen = mcDestinationScreen; 
     } 
    } 
} 
+0

也许有人可以帮你,但是这对我来说过于抽象。在块中发布一些格式化的代码,以便我实际上可以看到您当前的实现 –

+0

因此,您需要根据s字符串值来实例化某个类?与隐藏其他(以前打开的)屏幕有关吗? – www0z0k

+0

代码添加到问题中。 –

回答

0

可能这是更好:

public function ChangeScreenTo(desinationScreenName: String) { 
     //REMOVE CURRENT SCREEN 
     if (currentScreen != null) { 
      removeChild(currentScreen); 
      currentScreen = null; 
     } 
     switch (destinationScreenName) { 
      case "exampleScreen1": 
       currentScreen = exampleScreen1 = new ExampleScreen1(); 
       break; 
      case "exampleScreen2": 
       currentScreen = exampleScreen2 = new ExampleScreen2(); 
       break; 
      ... 
     } 
     addChild(currentScreen); 
    }