'SuperGlobal'动作脚本的OOP变量?

时间:2010-11-24 17:11:52

标签: flash actionscript-3 oop variables singleton

我正在设计一个Flash网站,并使其面向对象。我有很多课程,我很难从其他课程访问信息(变量)。

为此,我通常将变量包含在我的类'函数(或构造函数)的参数中,或者我创建自定义事件对象,将变量传输到另一个类(侦听它们)。这种方法很迟钝。

我知道有局部变量(在函数内声明并且仅对该函数可用的变量)和全局变量(在类中声明为私有或公共,并且在该类中可用)。我可以以某种方式创建某种可用于整个Flash程序的“超全局”变量吗?

如果没有,你们是否知道在OOP设计中传递变量的方法?

谢谢!我会尝试实现一个单身人士。

3 个答案:

答案 0 :(得分:2)

不必像单身人士那样。解决方案非常简单:

package sg {
    public class SuperGlobal {
        public static var vars:Array = new Array();
    }
}

无论您在代码中的哪个位置,都可以使用以下方式访问 vars 数组:

sg.SuperGlobal.vars["test"] = "Hello World!";

// somewhere else:
trace(sg.SuperGlobal.vars["test"]); // Hello World!

答案 1 :(得分:0)

通常一个人用一个包含一些可以在任何地方使用的变量的单例类来做这件事。例如,创建一个名为“Environment”,“Settings”或“Program”的类,它包含一些静态变量,然后每个类可以通过Settings.soundIsMuted访问这些变量。

答案 2 :(得分:0)

Singleton类:

package {

   public class SingletonDemo {
      private static var instance:SingletonDemo;
      private static var allowInstantiation:Boolean;

      public static function getInstance():SingletonDemo {
         if (instance == null) {
            allowInstantiation = true;
            instance = new SingletonDemo();
            allowInstantiation = false;
          }
         return instance;
       }

      public function SingletonDemo():void {
         if (!allowInstantiation) {
            throw new Error("Error: Instantiation failed: Use SingletonDemo.getInstance() instead of new.");
          }
       }
    }
}

我想我现在明白了。谢谢!