Actionscript 3 在这种情况下,为什么从事件继承不起作用?
给定以下代码: C类事件:Actionscript 3 在这种情况下,为什么从事件继承不起作用?,actionscript-3,flash,apache-flex,inheritance,actionscript,Actionscript 3,Flash,Apache Flex,Inheritance,Actionscript,给定以下代码: C类事件: public class CEvent extends Event { public static const TYPE:String = "cEvent"; private var m_strCode:String; public function get code():String { return m_strCode; } public function CEvent(pCode:String,
public class CEvent extends Event
{
public static const TYPE:String = "cEvent";
private var m_strCode:String;
public function get code():String
{
return m_strCode;
}
public function CEvent(pCode:String, bubbles:Boolean=false,
cancelable:Boolean=false)
{
super(TYPE, bubbles, cancelable);
m_strCode = pCode;
}
}
A类:
dispatchEvent(new CEvent(MY_CONST))
B类:
m_a = new A();
m_a.addEventListener(CEvent.TYPE, onCEvent);
.
.
.
private function onCEvent(pEvent:CEvent):void
{
switch (pEvent.code)
{
case A.MY_CONST:
dispatchEvent(pEvent);
}
}
C类:
m_b = new B();
m_b.addEventListener(CEvent.TYPE, onCEvent);
.
.
.
private function onCEvent(pEvent:CEvent):void
{ // breaks right here
}
当它在C类上中断时,在最初从A类调度它之后,我得到了这个错误:
Error #1034: Type Coercion failed: cannot convert flash.events::Event@9861089 to
<path>.CEvent.
但我仍然需要理解问题是什么。谢谢。发生此错误是因为您尚未在自定义事件中实现
clone()
方法
重新分派事件(在类C中)时,Flash克隆事件,而不是仅重新分派原始事件
因此,重新调度的事件是一个普通的旧事件
对象,因为这是默认的clone()
方法返回的
通常,您应该始终为自定义事件实现clone()
方法。这很简单。在这种情况下,它应该如下所示:
override public function clone():Event
{
return new CEvent(m_strCode, bubbles, cancelable);
}
发生此错误的原因是您尚未在自定义事件中实现
clone()
方法
重新分派事件(在类C中)时,Flash克隆事件,而不是仅重新分派原始事件
因此,重新调度的事件是一个普通的旧事件
对象,因为这是默认的clone()
方法返回的
通常,您应该始终为自定义事件实现clone()
方法。这很简单。在这种情况下,它应该如下所示:
override public function clone():Event
{
return new CEvent(m_strCode, bubbles, cancelable);
}
这是特定于事件的,还是整个ActionScript都是这样?这是否意味着,至少对于重新分派自定义事件,几乎每次都必须创建一个全新的对象,而不是重复使用相同的引用?是的,这是特定于事件的。我不知道原因,但Flash Player会在事件重新调度时克隆事件。这一定有很好的理由,但我一直不知道为什么。
clone()
方法的示例仅说明必须在自定义事件中实现clone()
。这是特定于事件的,还是贯穿整个ActionScript的?这是否意味着,至少对于重新分派自定义事件,几乎每次都必须创建一个全新的对象,而不是重复使用相同的引用?是的,这是特定于事件的。我不知道原因,但Flash Player会在事件重新调度时克隆事件。这一定有很好的理由,但我一直不知道为什么。clone()
方法的示例仅说明必须在自定义事件中实现clone()
。。。