Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/actionscript-3/7.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Actionscript 3 在这种情况下,为什么从事件继承不起作用?_Actionscript 3_Flash_Apache Flex_Inheritance_Actionscript - Fatal编程技术网

Actionscript 3 在这种情况下,为什么从事件继承不起作用?

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,

给定以下代码:

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
}
当它在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()
。。。