-
AS3函数高级使用技巧
普通类 -
- 支持
- 批判
- 提问
- 解释
- 补充
- 删除
-
-
1、代理函数对象
设立一个代理函数对象,根据条件的不同,将它指向不同的函数,可实现动态改变(即运行时改变)。
var kingdaFunc:Function;
var sex:String = "male";
if(sex=="male") kingdaFunc = maleFunc;
else kingdaFunc = femaleFunc;
kingdaFunc();
function maleFunc(){
trace("I am a boy");
}
function femaleFunc(){
trace("I am a girl");
如何应用这种方式呢?
}-
2、建立函数执行队列
比如说,我有一个对象,我想根据不同的情况对它进行一系列的操作。但是有时需要所有的操作,有时又只需要一部分的操作,那么这个较高级的技巧,就能保证代码的高度重用性和简洁。
var funcAry:Array = new Array();
funcAry.push(aFunc);
funcAry.push(bFunc);
funcAry.push(cFunc);
var originObject:Object = new Object();
var execQueue:Number = funcAry.length;
for(var i:Number = 0;i<funcAry.length;i++){
funcAry[i](originObject);
}
for(var j in originObject){
trace(j+":"+originObject[j]);
}
function aFunc(e0:Object){
e0.aFuncExected = true;
trace("aFunc");
}
function bFunc(e0:Object){
e0.bFuncExected = true;
trace("bFunc");
}
function cFunc(e0:Object){
e0.cFuncExected = true;
trace("cFunc");
}-
3、利用函数返回函数
有一个proxyObject对象,我们希望根据proxy对象的内容来确定一个方法,处理myObject对象。
当proxyObject是字符串时,我们又希望根据字符串的内容来确定返回不同的函数。这些函数参数和类型是不完全相同的,有的可能是一个参数,有的可能多个参数,不同类型。
chooseFuncBy("A")("A func has only one parameter.");
chooseFuncBy("B")("B func has two parameters.","No.2 parameter");
chooseFuncBy("wu lala")("I choose A function");
var withObj:Object = new Object();
var myObj:Object = {name:"kingda",blog:"http://www.kingda.org",hobby:"Starcraft"};
chooseFuncBy(withObj)(myObj);
function chooseFuncBy(input:*):Function{
if(!(input is String)){
return objectFunc;
}
switch(input){
case "A":
return aFunc;
break;
case "B":
return bFunc;
break;
default:
return kingdaFunc;
}
}
function aFunc(ns:String){
trace("aFunc():"+ns);
}
function bFunc(ns:String,np:String){
trace("bFunc():"+ns+"one more Parameter:"+np);
}
function kingdaFunc(...rest){
trace("welcome!");
}
function objectFunc(kingdaObj:Object){
trace("objectFunc()");
for(var i in kingdaObj)
trace(i+":"+kingdaObj[i]);
}-
4、函数动态添加实例属性
var shot:Function = function(){
shot[’time’]++;
trace("shot():times:"+shot[’time’]);
}
shot[’time’]=0;
shot();
shot();
shot();-
5、函数对象动态添加实例方法
var shot:Function = function(){
shot[’time’]++;
trace("shot():times:"+shot[’time’]);
shot[’reload’]();
}
shot[’reload’] = function(){
trace("reload:"+this[’time’]);
if(this[’time’]>3) this[’time’] = 0;
}
shot[’time’]=0;
shot[’reload’]();
shot();
shot();
shot();
shot();
shot();
shot(); -
-
- 标签:
- trace
- afunc
- bfunc
- var
- function
- 学习元
- 函数
- kingdafunc
- choosefuncby
- ActionScript
- shot
- object
-
加入的知识群:
学习元评论 (0条)
聪明如你,不妨在这 发表你的看法与心得 ~