运用二:建立函数执行队列。
比如说,我有一个对象,我想根据不同的情况对它进行一系列的操作。但是有时需要所有的操作,有时又只需要一部分的操作。那么这个较高级的技巧,就能保证代码的高度重用性和简洁。
var funcAry:Array = new Array();
//将需要的操作步骤加入队列
funcAry.push(aFunc);
funcAry.push(bFunc);
funcAry.push(cFunc);
//供操作的对象
var originObject:Object = new Object();
//需要执行几步由execQueue这个参数决定,在实际工程运用中这个数可能是动态决定的。
var execQueue:Number = funcAry.length;
/核心步骤:/函数队列执行。实际运用中可以把它包装成一个函数,或者一个类的实例。
for (var i:Number =0; i
funcAry[i](originObject);
}
//trace出执行操作后的originObject里面的内容
for (var i in originObject) {
trace ( i + ":" + originObject[i]);
}
//操作步骤a,b,c
function aFunc(eObject) {
eO.aFuncExected = true;
trace ("aFunc()");
}
function bFunc(eObject) {
eO.bFuncExected = true;
trace ("bFunc()");
}
function cFunc(eObject) {
eO.cFuncExected = true;
trace ("cFunc()");
}
输出内容为:
aFunc()
bFunc()
cFunc()
cFuncExected:true
bFuncExected:true
aFuncExected:true
前三行表明a,b,c三个函数按顺序执行了。后三行表明orginObject确实经过了三步操作,多了三个为true的属性。
黑羽提醒:技巧可以再延深!
可以通过一个函数来管理队列里面各个元素的位置,达到改变操作函数的顺序。比如通过一个数组来安排调用顺序
var operationAry:Array = [2,1,0]
for(var i:Number = 0; i
funcAry[operationAry[i]](originObject);
}
这样函数就通过2,1,0这样的倒序来执行操作。
这个技巧还有很多可以延伸的地方,比如说动态控制操作函数的参数等等,供大家自己研究扩展。
