给定以下代码:
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, 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
}
在最初从 A 类调度它之后,当它在 C 类中断时出现此错误:
Error #1034: Type Coercion failed: cannot convert flash.events::Event@9861089 to
<path>.CEvent.
这似乎没有多大意义,而且似乎完全违背了继承的工作方式。即使 Adobe 的 dispatchEvent() 实现中有代码专门通过并删除通过继承添加的任何内容,并且只是分派一个“正常”事件实例,这应该会导致它在 B 类而不是 C 类中中断。
有人可以解释一下吗?谢谢。
编辑:顺便说一下,更改 B 类的代码来执行此操作会使一切正常:
dispatchEvent(new CEvent(pEvent.code));
我仍然需要了解问题所在。谢谢。