• 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条)

    评论为空
    聪明如你,不妨在这 发表你的看法与心得 ~



    登录之后可以发表学习元评论
      
暂无内容~~
顶部