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);
}
}
如您所见,我们有一个名为 internalDispatcher
的 protected 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;
}
}
根据您的要求,让您的事件处理程序保持静态可能更好,这样可以减少多次执行相同的代码而不改变输出。
场景:
我有 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);
}
}
如您所见,我们有一个名为 internalDispatcher
的 protected 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;
}
}
根据您的要求,让您的事件处理程序保持静态可能更好,这样可以减少多次执行相同的代码而不改变输出。