さて、これは私を興味深い長い研究に導きました!
AS2 eval()を模倣するためのutilsで満たされたこのきちんとしたSWCファイルを見つけました:http:
//www.riaone.com/products/deval/index.html
そして、これがあなたが探しているものが実際に機能するかもしれないという概念実証です:
package tests {
import flash.display.BitmapData;
import flash.display.Sprite;
import flash.utils.getQualifiedClassName;
import r1.deval.D;
public class RandomTests extends Sprite{
public function RandomTests() {
super();
var test:BitmapData = create(BitmapData, 100, 100, true, 0x00000000);
trace(test);
}
public function create( pClass:Class, ... pArgs ):* {
D.importClass(pClass);
var fullQName:String = getQualifiedClassName(pClass);
var qNameSplit:Array = fullQName.split("::");
var className:String = qNameSplit[1];
fullQName = qNameSplit.join(".");
var statements:String =
"import $0;\n" +
"return new $1($2);";
var args:Array = [];
for (var a:int = 0, aLen:int = pArgs.length; a < aLen; a++) {
switch(pArgs[a].constructor) {
case String:
args[a] = "\"" + pArgs[a] + "\"";
break;
default:
args[a] = pArgs[a];
break;
//throw new Error("Unhandled type, please add it: " + pArgs[a].constructor);
}
}
return D.eval(XString.gsub(statements,[fullQName, className, args.join(",")]));
}
}
}
依存関係のビットについては申し訳ありませんが(簡単なサブ置換のための私のXStringクラスのように)、理論的には機能します。唯一の問題は、オブジェクト参照を引数エントリとして渡すことです。しかし、もう一度...r1.deval.Dクラスがそれを取ることができるかもしれません...うーん。
とにかく、これは共有する価値があるのではないかと思いました。