假设(作为一个例子)我有一个类,我想记录所有方法调用。
在PHP中,这可以使用__call()
快速轻松地完成,也可以使用装饰器的Python实现。
在Actionscript 3中完成相同操作的最简单方法是什么?
答案 0 :(得分:2)
扩展flash.utils.Proxy
并使用flash.utils.flash_proxy
命名空间。有类似于__get
,__set
的方法以及删除方法的方法。例如,__call
方法是:
override flash_proxy function callProperty(name:*, ...rest):*;
所以,如果有一个扩展代理的类,你可以:
var test:MyObject = new MyObject();
test.myMethodThatIsntDefined("param");
然后将调用callProperty并将name设置为“myMethodThatIsntDefined”,并且“param”将位于... rest数组中。
指向asdoc的链接有一个简单的实现,可以让你前进。我通常将Proxy类用于API。例如,当天我有一个Flickr API包装器,它将函数调用的名称转换为Flickr API中的API方法名称。类似的东西:
flickr.galleriesGetPhotos();
并且在callProperty中,我在第一个单词上拆分以获取API名称“flickr.galleries.get_photos”。我认为这些名字不同。
答案 1 :(得分:1)
您可以尝试使用Proxy类。
dynamic class MyProxy extends Proxy {
flash_proxy override function callProperty(name:*, ...rest):* {
try {
// custom code here
}
catch (e:Error) {
// respond to error here
}
}
参见:http://www.adobe.com/livedocs/flash/9.0/ActionScriptLangRefV3/flash/utils/Proxy.html