AS3:EventListener回调会覆盖函数的默认参数吗?

时间:2015-01-17 16:48:49

标签: actionscript-3 function callback event-listener default-parameters

我发现今天遇到了一些奇怪的事。我有一个带有布尔默认参数的函数:

function f(boolean:Boolean=false) {
    trace(boolean);
}

正常调用可以提供您期望的结果:

f(); //traces false

但是现在如果我让我的函数成为事件监听器的回调,那就会发生一些奇怪的事情:

addEventListener("test",f);
dispatchEvent(new Event("test")); //traces true

如果我将其作为点击某些内容的回调,也会发生同样的事情:

mySprite.addEventListener(MouseEvent.CLICK,f); //Traces true on click

有谁可以解释发生了什么?我的默认值false发生了什么?当事件监听器调用我的函数时,它没有传递任何参数。

3 个答案:

答案 0 :(得分:1)

我认为听众不会使用默认参数。您可以使用一个小的内联函数来包装您想要调用的函数:

function f(boolean:Boolean=false) {
    trace(boolean);
}

addEventListener("test", function(e:Event):void { f() } );
dispatchEvent(new Event("test")); //traces false

答案 1 :(得分:0)

当你调度一个事件时,你的监听器函数会从上游接受参数,然后参数转换为boolean

答案 2 :(得分:0)

正如Adobe所说的那样listener function

  

...此函数必须接受Event对象作为其唯一参数,并且必须不返回任何内容

所以在你的情况下,如果你这样做:

function f(boolean:Boolean = false) {
    trace(boolean);
}

stage.addEventListener(MouseEvent.CLICK, f);    // gives : true

OR

var event:MouseEvent = new MouseEvent(MouseEvent.CLICK);

trace(Boolean(event));                      // gives : true

f(event);                                   // gives : true

您将获得始终相同的结果:true,因为每次您的事件var都会自动传递到您的f函数并转换为Boolean,因为它不是null您将获得true

trace(Boolean(!null))                       // gives : true