Actionscript 3 ActionScript 3-动态编写函数
我正在寻找以下JavaScript代码的AS3等价物:Actionscript 3 ActionScript 3-动态编写函数,actionscript-3,user-defined-functions,on-the-fly,Actionscript 3,User Defined Functions,On The Fly,我正在寻找以下JavaScript代码的AS3等价物: var funcName = "foo();" var fHandler = new Function("a",funcName + "return a + 1"); fHandler // now equals a function like function(a){ foo(); return a + 1 } 好的,这是一个非常简单的例子 更大的图景是: 我有一个与JavaScript客户端一起工作的服务器。此服务器给出的每个响
var funcName = "foo();"
var fHandler = new Function("a",funcName + "return a + 1");
fHandler // now equals a function like function(a){ foo(); return a + 1 }
好的,这是一个非常简单的例子
更大的图景是:
我有一个与JavaScript客户端一起工作的服务器。此服务器给出的每个响应都是对JavaScript函数的回调,提供服务器响应的参数
因此,它不使用combersome strict JSON协议(在属性名称周围加引号,不要求这样的引号是有效的对象文字,等等,在AS3中仍然是有效的对象文字的其他一些小差异),并且服务器已经实现了100多个API
然而,现在有一个为移动设备生成Air客户端的请求
如果我能做到以下几点,那就太好了。
它是有效的EMCA脚本,但不适用于AS3
public function responseFromServer(String:s){
s = chopCallbackWrap(s); //strips the 'myCallback(' and ')' parts
//s is now always a string describing a valid Object-Literals not necessarily JSON
return new Function("", " return " + s ) ();
}
另一个方面是使用从服务器实时分发的通用客户端算法进行处理
在AS3中怎么做?这在AS3(或2)中是不可能的,因为运行时中没有内置脚本编译器(意味着AS3程序中没有AS3代码的动态解释)。也没有eval函数(或者更确切地说,它不做javascript eval所做的事情)
您可能需要为flash版本制作另一个API,或者以某种方式插入外部javascript引擎。这在AS3(或2)中是不可能的,因为运行时中没有内置脚本编译器(这意味着AS3程序中没有对AS3代码的动态解释)。也没有eval函数(或者更确切地说,它不做javascript eval所做的事情)
您可能需要为flash版本制作另一个API,或者以某种方式插入外部javascript引擎。我看到了两种解决方案: 首先是在运行时使用所需的脚本创建新的swf文件,并将其加载到
Loader.loadBytes()
中
我建议您检查此库,并。我没有使用它们的经验,但它们都可以在运行时创建和发布swf(可能有些不支持在已发布的swf中编写脚本,所以这是一项实验任务)
第二个是通过ExternalInterface
执行JS,并在as3中使用结果
UPD:为AS3-增加一个AS2
eval
模拟库。我看到了两种解决方案:
首先是在运行时使用所需的脚本创建新的swf文件,并将其加载到Loader.loadBytes()
中
我建议您检查此库,并。我没有使用它们的经验,但它们都可以在运行时创建和发布swf(可能有些不支持在已发布的swf中编写脚本,所以这是一项实验任务)
第二个是通过ExternalInterface
执行JS,并在as3中使用结果
UPD:AS2
eval
模拟AS3-。感谢您提供的信息-非常好。它可以用于第一个场景-我们将研究它。至于另一个——在iPhone air编译中加载更多的SWF不会暴露它的功能,只会显示图形(或者我做错了什么吗?)是的,由于iOS for air,它在iOS下无法工作。谢谢你提供的信息——这太棒了。它可以用于第一个场景-我们将研究它。另一方面,在iphoneair编译中加载更多的swf不会暴露它的功能,而只会显示图形(或者我做错了什么吗?)是的,由于iOS for air,它在iOS下无法工作。