委托这个概念在c#/java中用得比较多,有点儿像c++中的函数指针,但比它更先进.这里有msdn对delegate类的文档:
http://msdn.microsoft.com/library/chs/default.asp?url=/library/chs/cpref/html/frlrfsystemdelegateclassctortopic.asp
然而actionscript2对delegate是怎么实现的呢?我记得很早的时候grant skinner写过一个eventproxy类,然后是mike chambers,最后mm官方把mike的替代为现在flash 2004 updater2的mx.utils.delegate类。个人认为,这个类不是很好,很多地方体现不出它的优点。也许这跟语言有局限性有关。我一个月以前也在研究这方面的东西,看是否有方法写过一个delegate类做一些更方便的运用,然后碰到一个技术难题。就是actionscript2实现反射,这个想了很久还是没有成功。假如在以前的actionscript prototype语法中倒是可以实现。
先拿现在的做些研究吧。
mike的tutorial:
http://www.macromedia.com/devnet/mx/flash/articles/eventproxy.html
riacn的翻译:
http://www.riacn.com/web/showarticle.asp?id=72
转以前我写的:
委托不光是事件代理.mike 只讲到delegate的一个运用.
我来举另一个简单的例子吧,后面我会再添一些技巧给大家.
//****************************************************** // @filename democlass.as // @package // @description 演示类,有两个静态方法 // @author aol // @email jeremy1982@21cn.com // @create 2004.07.29 // @lastchange 2004.07.29 // @history //****************************************************** class democlass { public static function fun1(arg:string):string { var str:string = "第一个函数的结果"+arg; return str; } public static function fun2(arg:string):string { var str:string = "第二个函数的结果"+ arg; return str; } }; //*.fla import mx.utils.delegate; var delegatearray:array = [ delegate.create(null,democlass.fun1), delegate.create(null,democlass.fun2) ]; function display(f:function,arg:string) { trace(f(arg)); } for(var i:number = 0; ioutput窗口返回的是:length; i++ ) { trace("开始用delegatearray["+i+"]"); display(delegatearray[i],"参数一"); display(delegatearray[i],"参数二"); display(delegatearray[i],"参数三"); }
开始用delegatearray[0]
第一个函数的结果参数一
第一个函数的结果参数二
第一个函数的结果参数三
开始用delegatearray[1]
第二个函数的结果参数一
第二个函数的结果参数二