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