【学习笔记】函数高级使用技巧:利用函数返回函数

【殿堂之路】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 */

我的心得:

 暂时还不知道实际应用中,如何灵活地用到这种方法,但是现在先记录下来。希望以后能用上。

posted @ 2012-06-20 10:33  louisluo77  阅读(220)  评论(0编辑  收藏  举报