Main Action & Arcade Puzzle Skill Cards & Boards Strategy Sport Other
 

Немного об addEventListener и не только

Во время разработки Circles and Squares была обнаружена следующая фишка AS3.

Раньше приходилось делать так:

Code
button.addEventListener(MouseEvent.CLICK, buttonClickHandler);
...
function buttonClickHandler(e:Event):void {
    trace('hello world!!!'); 
}

Этот способ мне долгое время не нравился, приходилось для каждой кнопки писать отдельную функцию. Можно конечно решить эту проблему создением своего класса кнопки, этим я одно время и обходился, но потом выяснилось что можно делать все намного проще:

Code
button.addEventListener(MouseEvent.CLICK, function() {trace('hello world!!!');});

Вообщем, внутри function() {} можно писать любой набор строчек кода.

При описании любой функции можно задавать в качестве одного из параметров функцию func1:Function, и в качестве значения присваивать function() {}.

Например:

Code
function callFunction(func1:Function):void {
    func1(null);//Выполняем функцию
}
...
callFunction(function() {trace('Hello World!!!')})

Короче, изгаляться можно как угодно - делать несколько таких вложений; задавать саму функцию как параметр при вызове самой себя, это будет самая натуральная рекурсия; В этом смысле AS3 оказывается очень гибкий язык.

Единственный недостаток - при этом некорректно работает автоформатирование кода.

Категория: Поучительное | Просмотров: 425 | Дата: 07.03.2010 | Комментарии (0)