Можно, но есть 2 проблемы:
1) не читабильно
2) нельзя удалить

Код AS3:
addEventListener( MouseEvent.CLICK, function( event:Event ):void { trace( event ) });
С другой стороны можно создать функционал:

Код AS3:
package
{
import flash.display.SpreadMethod;
import flash.display.Sprite;
import flash.events.Event;
import flash.events.EventPhase;
import flash.events.MouseEvent;
public class Test extends Sprite
{
public function Test()
{
super();
var first:Sprite = addChild( button() ) as Sprite;
first.addEventListener( MouseEvent.CLICK, handler( trace, true, "hello world" ) );
var second:Sprite = addChild( button() ) as Sprite;
second.x = 122;
second.addEventListener( MouseEvent.CLICK, handler( trace, false, "hi" ) );
}
protected function button( color:uint = 0x000000, width:uint = 100, height:uint = 22 ):Sprite
{
var sprite:Sprite = new Sprite;
sprite.graphics.beginFill( color );
sprite.graphics.drawRect( 0, 0, width, height );
sprite.graphics.endFill();
sprite.buttonMode = true;
sprite.useHandCursor = true;
return sprite;
}
protected function handler( closure:Function, remove:Boolean = true, ...arguments:* ):Function
{
var wrapper:Function = function( event:Event ):void
{
closure.apply( null, arguments );
if( remove )
{
event.target.removeEventListener( event.type, wrapper );
//event.eventPhase == EventPhase.BUBBLING_PHASE ? false : true );
}
}
return wrapper;
}
}
}
Но AS3 крайне плохо решает вопросы с выделением памяти вложеным функциям, и я не стал бы рекомендовать использовать это часто, хотя временами помогает.