我发现今天遇到了一些奇怪的事。我有一个带有布尔默认参数的函数:
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发生了什么?当事件监听器调用我的函数时,它没有传递任何参数。
答案 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