由于使用 函数表达式定义法 定义的函数是一个动态类(dynamic)实例,故可在运行时为其动态添加实例属性与方法。
以下代码摘自《ActionScript 3.0 殿堂之路》:
01 | //程序运行时声明临时Function变量shot |
02 | var shot:Function = function ():void{ |
03 | shot[ "times" ] ++; |
04 | trace( "shot(): times: " + shot[ "times" ]); |
05 | shot[ "reload" ](); |
06 | }; |
07 | |
08 | //为shot动态添加实例属性times,代码中数组运算符[]可以使用点号运算符"."替代 |
09 | shot[ "times" ] = 0; |
10 |
11 | //动态添加实例方法,该方法不仅限于临时声明方法,也可以是其他任何方式定义的函数 |
12 | shot[ "reload" ] = function ():void{ |
13 | trace( "reload: " + this [ "times" ]); |
14 | if ( this [ "times" ] > 3) |
15 | this [ "times" ] = 0; |
16 | }; |
17 | |
18 | shot[ "reload" ](); |
19 | shot(); |
20 | shot(); |
21 | shot(); |
22 | shot(); |
23 | shot(); |
24 | shot(); |
由此可见,这种动态添加的做法可谓非常灵活,然后高灵活性往往伴随的是高风险、不可控、难以阅读,故在使用时还需要再三审度。