gpt4 book ai didi

actionscript-3 - 在运行时重新定义命名函数

转载 作者:行者123 更新时间:2023-12-04 06:39:29 27 4
gpt4 key购买 nike

我想做的有点奇怪,但我想知道是否有人能想出一个聪明的方法来做我想做的事。基本上,我想在运行时重新定义一个命名函数。我可以用匿名函数做到这一点,但我想不出一种方法来为命名函数做到这一点。我想这样做,以便我可以在测试框架的对象上实现“ spy ”功能(Jasmine 到 Flex 的端口)。

以这个类为例:

public class TestClass
{
public var anonymous:Function = function():void {
trace("original anonymous");
};

public function named():void {
trace("original named");
}
}

我可以轻松地重新定义匿名函数,因为它只是一个变量。 Javascript 经常使用这个习语。
var testClass:TestClass = new TestClass();
testClass.anonymous = function():void { trace("overridden anonymous"); }

但是,当我对命名函数做同样的事情时,你会得到一个编译时错误:
// Does not compile
testClass.named = function():void { trace("overridden named"); }

我试图让它更“松软”,但这会导致运行时失败“无法分配给在 TestClass 上命名的方法”。
// Compiles with runtime failure
testClass["named"] = function():void { trace("overridden named"); }

比我更聪明的人能想出破解这个的方法吗?字节码会被劫持吗?某物?

最佳答案

I want to modify an object, not a class



但是对象不包含函数,只有非静态变量。我尝试使用 prototype属性和替换方法,但仍然调用原始方法而不是注入(inject)方法。

关于“hack”字节码,你的意思是“hack”已经在运行时加载了 SWF?我认为这是不可能的。不过,我敢肯定,您可以使用 as3swf 之类的东西解析 SWF,在字节码中查找方法,替换它并将结果保存在新的 SWF 中。

关于actionscript-3 - 在运行时重新定义命名函数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5440073/

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