【学习笔记】函数高级使用技巧:利用函数返回函数
【殿堂之路】P70页
原文引用:“有一个proxyObject对象,我们希望根据proxy对象的内容来确定一个方法,处理myObj对象。当proxyObject时字符串时,我们又希望根据字符串的内容来确定返回不同的函数(或方法)。这些函数参数和类型是不完全相同的,有的可能是一个参数,有的可能是多个参数,不同类型。此方法编译器无法检查错误,需要使用者清楚管理好每个目标函数和判断逻辑,否则容易出错。”
1 //通过A调用只有一个参数的aFunc() 2 chooseFuncBy("A")("A func has only one parameter"); 3 trace("\n****************\n"); 4 5 //通过B调用有两个参数的bFunc() 6 chooseFuncBy("B")("B func has two parameters.","The NO.2 parameter"); 7 trace("\n****************\n"); 8 9 //input没有匹配到对应的字符串,故调用默认函数kingdaFunc 10 chooseFuncBy("Hello")("Haha"); 11 trace("\n****************\n"); 12 13 //初始化两对象 14 var withObj:Object = new Object(); 15 var myObj:Object = {Name:"Louisluo",Blog:"http://www.cnblogs.com/louisluo77/",hobby:"ActionScript 3"}; 16 17 //withObj作为chooseFuncBy函数的判断依据,myObj作为参数传递给所要调用的函数 18 chooseFuncBy(withObj)(myObj); 19 20 //定义chooseFuncBy函数,里面有两个条件判断:利用参数的个数,is确定不同类的实例,达到 21 //选择函数的目的。此外,还可以在这里可以添加其他的条件判断,从而达到拓展运用的目的 22 function chooseFuncBy(input:*):Function 23 { 24 if (! (input is String)) 25 { 26 return objectFunc; 27 } 28 switch (input) 29 { 30 case "A" : 31 return aFunc; 32 case "B" : 33 return bFunc; 34 default : 35 return kingdaFunc; 36 } 37 } 38 39 function aFunc(nS:String):void 40 { 41 trace("aFunc():"+nS); 42 } 43 44 function bFunc(nS:String,nP:String):void 45 { 46 trace("bFunc():"+nS+" one more Parameter:"+nP); 47 } 48 49 function kingdaFunc(...rest):void 50 { 51 trace("Welcome to Louisluo's blog!"); 52 } 53 54 //kingdaObj相当于代理对象,而myObj是被代理对象 55 function objectFunc(kingdaObj:Object):void 56 { 57 trace("objectFunc():"); 58 for (var i in kingdaObj) 59 { 60 trace(i+":"+kingdaObj[i]); 61 } 62 } 63 64 65 /*输出如下: 66 aFunc():A func has only one parameter 67 68 **************** 69 70 bFunc():B func has two parameters. one more Parameter:The NO.2 parameter 71 72 **************** 73 74 Welcome to Louisluo's blog! 75 76 **************** 77 78 objectFunc(): 79 Name:Louisluo 80 Blog:http://www.cnblogs.com/louisluo77/ 81 hobby:ActionScript 3 82 */
我的心得:
暂时还不知道实际应用中,如何灵活地用到这种方法,但是现在先记录下来。希望以后能用上。