<b>Flash ActionScript高级本领:深化理解Function(2)</b>[Flash设计]
本文“<b>Flash ActionScript高级本领:深化理解Function(2)</b>[Flash设计]”是由七道奇为您精心收集,来源于网络转载,文章版权归文章作者所有,本站不对其观点以及内容做任何评价,请读者自行判断,以下是其具体内容:
废话少说,这次持续上次话题.看看人气情形,假如大家喜好我这个高级本领专题,那么日后会连续公布一些我自己这几年来项目开辟笔记中的实用本领.
操纵函数返回函数:有一个proxyObject对象,我们但愿按照proxy对象的内容来肯定一个办法,来处理myObject对象.当proxyObject是字符串时,我们又但愿按照它字符串的内容来肯定返回差别的函数(或办法).这些函数参数和范例是不完好相同的,有的大概是一个参数,有的大概是多个参数,差别范例.那么传统的办理办法:在函数内部调用其他函数就显得力不从心.即便办理,也不如我下面chooseFuncBy()这个函数简便.
缺陷当然有,那就是对比机动,你一定要清楚管理好每个目标函数和判断逻辑.因为这种机动的编程方法编译器是无法查抄,不能查出范例不匹配这种错误的.菜鸟慎用.
//通过A调用只有一个参数的aFunc():chooseFuncBy("A")("A func has only one parameter.");
//输出:aFunc():A func has only one parameter.
//通过B调用有两个参数的bFunc():
chooseFuncBy("B")("B func has two parameters.","No.2 parameter");
//输出:bFunc():B func has two parameters. one more Parameter:No.2 parameter
//字符串不符,默许函数
chooseFuncBy("wu lala")("I choose A function");
//输出:Welcome to Kingda.org! My blog
var withObj:Object = new Object();
var myObj:Object = {name:"黑羽", blog:"http;//www.kingda.org", hobby:"Starcraft"};
chooseFuncBy(withObj)(myObj);
/* 输出:
objectFunc():
name:黑羽
blog:http;//www.kingda.org
hobby:Starcraft
*/
function chooseFuncBy(inputString):Function {
//应用一:操纵参数的种类来肯定返回的函数
if (!(typeof(inputString) == "string")) {
return objectFunc;
}
//应用二:按照参数内容来返回函数
switch (inputString) {
case "A":
return aFunc;
case "B":
return bFunc;
default:
return kingdaFunc;
}
//更多延伸应用:操纵参数个数、instanceof肯定差别Class的实例来挑选函数等等
}
function aFunc(nS:String):Void {
trace ("aFunc():" + nS);
}
function bFunc(nS:String, nP:String):Void {
trace ("bFunc():" + nS + " one more Parameter:"+ nP);
}
function kingdaFunc():Void {
trace ("Welcome to Kingda.org! My blog");
}
function objectFunc(kingdaObj:Object):Void {
trace ("objectFunc():");
for (var i in kingdaObj) {
trace ( i + ":" + kingdaObj[i]);
}
}
如上次所说,函数也是一个Object,不但如此,函数Object也可以动态增添属性和办法.
函数动态增添属性
应用一:操纵函数动态属性来计算函数调用次数
当然你完好可以用这个本领来干更多更有效的事,我只是举一反三开个头. :)
一个游戏中有开战函数shot().我想知道总共开战了多少次,那么可以利用shot函数的属性times.
总的来说,关于AS2.0来说,这是一个不太好的编程习惯,固然很便利.但由于动态属性的利用使得编译器无法举行范例查抄,也使的大项目的出错大概性增添.
关于AS1.0来说,与其利用Global变量,如_root, _level1,那么我甘愿倡议你利用这个编程本领.总比Global变量来的安全,不易产生冲突和蛛网效应.
注意,引用shot函数动态属性时,在函数内不能利用this.times,那不会指向函数本身的属性.只能利用函数名加属性,例: shot.times
shot.times = 0; //初始化timesshot();//输出:Shot(): times:1
shot();//输出:Shot(): times:2
shot();//输出:Shot(): times:3
function shot():Void {
shot.times ++;
trace ("Shot(): times:"+ shot.times);
//shot的其他代码放在这儿
}
函数对象动态增添办法
对了,更风趣的就是增添办法了.
函数这么一玩弄之后,Function对象成了二不像:不像普通类实例,也不像一个函数.这个本领可以让我们的函数变得很强盛,也会让它更复杂难以管理.
双刃剑阿,自己衡量着办吧.
我的倡议是AS1.0可以稍多一点鉴戒这个本领,AS2.0用户该当尽大概利用尺度办理方法.在小的范围内可认为了便利而应用,毫不赞成大范围大规模的利用.
shot.reload = function () {
trace ("reload:"+ this.times );
if (this.times >3) {
this.times = 0;
}
}
shot.reload();
shot();
shot();
shot();
shot();
shot();
shot();
function shot():Void {
shot.times ++;
trace ("Shot(): times:"+ shot.times);
shot.reload();
//shot的其他代码放在这儿
}
/*输出:
reload:0
Shot(): times:1
reload:1
Shot(): times:2
reload:2
Shot(): times:3
reload:3
Shot(): times:4
reload:4
Shot(): times:1
reload:1
Shot(): times:2
reload:2
*/
写在篇尾的话:可以看出,应用动态增添属性和办法的本领,可以使Function这个特别的东西非常强盛起来.并且其机动程度更是空前,试想假如动态增添的办法可以返回函数(见第一个本领).不要忘了,动态增添的办法可以直接拜候函数的输入参数,那么其衍生的本领又有多少种呢?函数又可以变成怎样的一种强有力的编程对象呢?只有想不到,没有做不到.这就是Function给我们展示的无穷机动性.
但是,我还是要说,本领终归是本领,它有其两面性.机动是它的长处,也是它的缺陷.小范围的应用让你利落非常;大项目中大范围的利用,除非你管理的很好,不然会让你头疼欲裂死此后快.
通读AS2.0全部公开的类的代码后,你会发现Macromedia的程序员也利用了上述的本领.只要管理的好,这绝对是ActionScript的长处所在.
AS2.0 coder们,欢乐之余,慎之又慎!
(全文完)
P.S 有人问我为什么不写写argument, callee, caller等方面的本领,我的设法是这些在帮忙中写的很清楚,大家可以自己看.而这些相关的本领,文章已经有不少,看看其遍及程度已经不能算高级本领了,所以不再赘述!
以上是“<b>Flash ActionScript高级本领:深化理解Function(2)</b>[Flash设计]”的内容,如果你对以上该文章内容感兴趣,你可以看看七道奇为您推荐以下文章:
本文地址: | 与您的QQ/BBS好友分享! |