所以 - 我有一堆类的实例,并且我想要调用所有这些函数。我想知道是否而不是遍历我拥有的每个实例,是否有某种方法可以在类上声明一个函数,当调用在每个实例上运行时?例如 - 如果我的班级看起来像这样:
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()
并调用我的所有实例?
我不知道我是否在解释这个问题......但事实确实如此。我喜欢你的任何建议,不仅仅涉及“将你的实例放在一个数组或向量中,像一个真人一样循环遍历它们。”
答案 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
中传递的属性实际上是属性,或者您添加了某种错误检查以确定。