Ну, это привело меня к интересному длинному исследованию!
Я обнаружил, что этот аккуратный SWC-файл заполнен утилитами для имитации AS2 eval ():
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 мог бы принять это ... хм.
Во всяком случае, подумал, может быть, это стоит поделиться.