在ActionScript中,是否可以在适用于该类的所有实例的Class上调用函数?

时间:2013-08-07 17:02:04

标签: actionscript-3 flash design-patterns

所以 - 我有一堆类的实例,并且我想要调用所有这些函数。我想知道是否而不是遍历我拥有的每个实例,是否有某种方法可以在类上声明一个函数,当调用在每个实例上运行时?例如 - 如果我的班级看起来像这样:

public class MyClass{

    public var variable:String = "";

    public function MyClass(){}

    public function myFunction():void{
       this.variable = "BLORE";
    }
}

我有一堆这些:

var class1:MyClass = new MyClass();
var class2:MyClass = new MyClass();

有没有办法可以调用MyClass.myFunction()并调用我的所有实例?

我不知道我是否在解释这个问题......但事实确实如此。我喜欢你的任何建议,不仅仅涉及“将你的实例放在一个数组或向量中,像一个真人一样循环遍历它们。”

2 个答案:

答案 0 :(得分:1)

使用static函数使用static Array并引用该类的所有实例一样简单。

每次调用类构造函数来创建新实例时,都需要将实例的引用添加到Array

arrayOfInstances.push(this);

然后你的static函数将循环数组并做你需要的任何事情。

不要忘记添加一些静态方法来删除Array中的所有引用,以便垃圾收集器可以从内存中清除这些对象。

答案 1 :(得分:1)

以下是如何完成此操作的简单示例:

package {
    public class Example {
        public static var instances:Array;

        public function Example() {
            if ( !instances ) {
                instances = [];
            }
            instances.push( this );
        }

        public static function setPropertyOnAll( property:String, value:Object ):void {
            var l:uint = instances.length;
            for ( var i:uint = 0; i < l; i++ ) {
                instances[i][property] = value;
            }
        }
    }
}

基本上,您的类中有一个静态数组,并且在实例化时将该类的每个实例都推送到数组中。然后你只需遍历数组并更改属性。

请记住以下几点:

  • 如果property不存在,则无错误处理。因此,请确保您在setPropertyOnAll中传递的属性实际上是属性,或者您添加了某种错误检查以确定。
  • 将每个实例保存到数组中将使它们不符合垃圾回收的条件。显然,这非常糟糕。如果这样做,您将需要创建一种从阵列中删除每个实例的方法,即使每次都必须手动完成。我没有这样做,因为不可能知道如何/何时运行它或你的类结构是什么样的,所以这将是你需要弄清楚的事情。您希望让他们不符合垃圾回收的条件