之前写了篇文章,描述了 AS3 模拟实现匿名类的一种方法([url=http://mysh.iteye.com/blog/644482]AS3 匿名类实现模拟(有类型)[/url]),它虽然有静态语言的一些优点,如有类型,风格还算优雅,但是显然需要付出一些代价,如要多写几个类型定义。
假如需要的匿名实现很多,而且类型不是那么重要的时候,可以采用简单一点、动态一点的方式,这种方式更像 JavaScript:
这种方式的优点显而易见:它使用灵活,不需要额外的类型定义;缺点是,匿名类对象没有类型,如果你的方法签名(方法名和参数列表)写错了,错误需要在运行时(而不是编译时)才能被发现
假如需要的匿名实现很多,而且类型不是那么重要的时候,可以采用简单一点、动态一点的方式,这种方式更像 JavaScript:
package zzx.test.flex.closure2 {
import mx.controls.Alert;
public class Anonymouse {
public function test1():void{
testAnonymouse({
f1:function():void{
Alert.show("this is anonymouse f1");
},
f2:function(name:String):void{
Alert.show("hello, "+name);
}
});
}
private function testAnonymouse(obj:Object):void{
obj.f1();
obj.f2({name:"mysh"}.name);
}
}
}
这种方式的优点显而易见:它使用灵活,不需要额外的类型定义;缺点是,匿名类对象没有类型,如果你的方法签名(方法名和参数列表)写错了,错误需要在运行时(而不是编译时)才能被发现