gpt4 book ai didi

actionscript-3 - 有什么方法可以拦截 AS3 中的类型化函数调用?

转载 作者:行者123 更新时间:2023-12-04 04:30:21 25 4
gpt4 key购买 nike

我知道使用动态添加到动态代理类的函数很容易,但我也希望能够拦截对类型化函数的调用,就像在 Python 中使用装饰器一样。下面的例子。我希望有一些方法能够通过“typedFunc”的“callProperty”,就像它已经通过“dynFunc”一样,

example

package
{
import flash.display.Sprite;
[SWF(width = '400', height = '400')]
public class Test extends Sprite
{
public function Test()
{
var t:TypeTest = new TypeTest();
t.dynFunc = function dynFunc(s:String, i:int):Boolean { return true; };

t.typedFunc("a", 1);
t.dynFunc("b", 2);
}
}
}
import flash.utils.Proxy;
import flash.utils.flash_proxy;

internal dynamic class TypeTest extends Proxy
{
private var customs:Object = new Object();
override flash_proxy function callProperty(name:*, ...parameters):* {
var retval:* = (this[name] as Function).apply(null, parameters);
trace("called", name, "with", parameters);
return retval;
}
public function typedFunc(s:String, i:int):Boolean {
return false;
}
override flash_proxy function getProperty(name:*):* { return customs[name]; }
override flash_proxy function setProperty(name:*, value:*):void { customs[name] = value; }
}

最佳答案

这在 ActionScript 中不容易做到,因为编译器不允许您在运行时使用“常规”ActionScript 语言构造更改密封类的方法 - 因此您将无法更改原始类。时期。

幸运的是,有 as3commons:bytecode图书馆。您可以使用它在运行时生成动态代理类:它生成该类的字节数组表示并将其加载到 AVM 中,因此您可以像使用任何其他类一样使用它。甚至可以使用原始类作为蓝图并用修改后的版本替换它,但我必须承认我还没有尝试过。

关于actionscript-3 - 有什么方法可以拦截 AS3 中的类型化函数调用?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10252235/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com