如何传递对象,MouseEvent.CLICK和函数来触发

时间:2015-08-16 17:30:34

标签: actionscript-3 actionscript

我想传递给函数对象,类型为MouseEvent.CLICK的const和触发的函数。就我而言:

我班助理:

    public static function addEventListenerTo(obj:Object, MouseEventConst:String, functinToTrigger:Function) {
obj.addEventListener(MouseEventConst, functinToTrigger:Function);
}

和我的类引擎

Assistant.addEventListenerTo(deck,"MouseEvent.CLICK",showObject);

请告诉我如何使其发挥作用。谢谢。

1 个答案:

答案 0 :(得分:0)

在您提供的代码中,有一个编译器错误 Tahir Ahmed在他的第二个评论中指出的那个)。

通过删除第一个代码块中的第二个:Function来解决此问题:

public static function addEventListenerTo
    (obj:Object, MouseEventConst:String, functinToTrigger:Function) 
{
    obj.addEventListener(MouseEventConst, functinToTrigger);
}

将让代码编译。 (我包装了Method签名以避免滚动条,这不是编译它所必需的。

另一个主要问题是配置错误(或者可能是拼写错误):关于MouseEvent.CLICK的问题。 ( Tahir Ahmed在他的第一个评论中指出的那个

查看文档时,它被定义为具有值"click"(遵循小写常量名称的AS3约定的字符串文字)。因此,要将其传递给您的方法,您可以通过编写MouseEvent.CLICK(不包含" s)来引入对常量的引用,或者通过写{{1}来传递其值来达到相同的目标}}。 由于使用引用将防止错误输入,因为编译器会检查它,因此应首选第一种方法。

所以调用Method应如下所示:

"click"

如果您想知道为什么您的版本不起作用,您应该阅读AS3 Events和EventDispatcher的简单介绍。作为一个简短的提示:如果deck将调度其Assistant.addEventListenerTo(deck, MouseEvent.CLICK, showObject); 属性设置为type的事件,则您的侦听器将被解雇。

在您使用它时,您可以通过主要内容来提高代码的质量

第一个是关于避免获取运行时错误并且更喜欢编译时错误:并非每个类型Object的实例都有一个名为"MouseEvent.CLICK"的方法。在当前代码中,当您将实例作为第一个参数传递给addEventListener时,没有此方法(例如Assistant.addEventListenerTo或类型{}的实例),错误将在您的swf显示时抛出它并且它可能会停止显示任何内容并可能向用户显示错误消息。 如果参数的类型是IEventDispatcher,编译器就会告诉您传递了不兼容的实例。

第二个是关于名称和惯例,它可以帮助其他开发人员阅读您的代码(帮助您获得更多乐趣)。

  • 你所谓的Array被称为AS3中的事件类型,它为参数提供了更好的名称,因为它是一个字符串无人阻止任何人传递其他事件类型的内容,如Event < / LI>
  • MouseEventConst是所谓的侦听器(或事件侦听器)
  • 参数名称的第一个字母应为小写

因此,如果我编写静态方法,它将如下所示:

functionToTrigger