AS3: обратный вызов EventListener переопределяет параметры функции по умолчанию?

Я обнаружил, столкнулся с чем-то странным сегодня. У меня есть функция с логическим параметром по умолчанию:

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 ответа

Решение

Как сказал Adobe о функции слушателя:

... Эта функция должна принимать объект Event как единственный параметр и не должна ничего возвращать

Так что в вашем случае, если вы делаете:

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

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

ИЛИ ЖЕ

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

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

f(event);                                   // gives : true

Вы получите всегда один и тот же результат: trueпотому что каждый раз ваше событие автоматически передается вашему f функция и преобразована в Boolean и потому что это не null ты получишь true:

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

Я не думаю, что слушатель будет использовать параметр по умолчанию. Вы можете использовать небольшую встроенную функцию, чтобы обернуть функцию, которую хотите вызвать:

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

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

Когда вы отправляете событие, ваша функция слушателя примет параметр из восходящего потока, а затем параметр преобразуется в логическое значение

Другие вопросы по тегам