ActionScript2 delegate 研究[1]

[入库:2005年8月18日] [更新:2007年3月25日]

本文简介:选择自 flashvan 的 blog

委托这个概念在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; ilength; i++ )
{
        trace("开始用delegatearray["+i+"]");
        display(delegatearray[i],"参数一");
        display(delegatearray[i],"参数二");
        display(delegatearray[i],"参数三");
}

output窗口返回的是:
开始用delegatearray[0]
第一个函数的结果参数一
第一个函数的结果参数二
第一个函数的结果参数三
开始用delegatearray[1]
第二个函数的结果参数一
第二个函数的结果参数二

本文关键:ActionScript2 delegate 研究
 

本站最佳浏览方式为 分辨率 1024x768 IE 6.0(或更高版本的 IE浏览器)

go top