ActionScript 3.0 class 扩展

ActionScript 3.0 class extends

场景:

我有 class characterObject 和扩展的 n class (cat, dog, bird, n...)

public class characterObject
{
    public static var totalCounter:int;
}
public class cat extends characterObject 
public class dog extends characterObject 
public class bird extends characterObject

扩展 classes 是否可以在有或没有事件的情况下监听主 class 中静态变量(例如 totalCounter)的变化?

这可以通过组合使用 getter/setter 函数和事件来实现。

getter 和 setter 在 actionscript 中是可以像变量一样访问的函数,使您能够在变量更改时执行函数。

public class characterObject
{
    private static var _totalCounter:int;
    protected static var internalDispatcher:EventDispatcher = new EventDispatcher();
    public static function get totalCounter():int
    {
        return _totalCounter;
    }
    public static function set totalCounter(value:int):void
    {
        _totalCounter = value;
        var event:Event = new Event("totalCounterChanged");
        internalDispatcher.dispatchEvent(event);
    }
}

如您所见,我们有一个名为 internalDispatcherprotected static 事件调度程序,只有扩展了 characterObject class,我们才能侦听来自该对象的事件.通过将真正的 totalCounter 隐藏在 getter/setter 之后,我们可以在值发生变化时调度事件。

然后我们可以在扩展的 classes:

中监听这个事件
public class cat extends characterObject
{
    public function cat()
    {
        super();
        internalDispatcher.addEventListener("totalCounterChanged",totalChangedHandler);
    }
    public function totalChangedHandler(event:Event):void
    {
        //Your code here;
    }
}

根据您的要求,让您的事件处理程序保持静态可能更好,这样可以减少多次执行相同的代码而不改变输出。