По сути, это невозможно. И это не имеет ничего общего с ActionScript. В большинстве других языков у вас такая же проблема, так как на левой стороне у вас есть анонимный объект, если язык поддерживает какую-либо такую вещь, или хеш.
Тем не мение. Существуют разные решения, это одно, которое может обрабатывать несколько вещей:
package {
public class ObjectUtils {
public static function createInstance(constructor:Class):* {
var ret:*;
switch (describeType(to).factory.constructor.parameter.(@optional == "false").length()) {
case 0: ret = new to(); break;
case 1: ret = new to(null); break;
case 2: ret = new to(null, null); break;
case 3: ret = new to(null, null, null); break;
case 4: ret = new to(null, null, null, null); break;
case 5: ret = new to(null, null, null, null, null); break;
case 6: ret = new to(null, null, null, null, null, null); break;
case 7: ret = new to(null, null, null, null, null, null, null); break;
case 8: ret = new to(null, null, null, null, null, null, null, null); break;
case 9: ret = new to(null, null, null, null, null, null, null, null, null); break;
default: throw new Error("no implementation for instantiating classes that require more than 9 constructor arguments");
}
return ret;
}
public static function castAnonymous(obj:Object, to:Class):* {
var ret = createInstance(obj);
for (var name:String in obj)
try {
ret[name] = obj[name];
}
catch (e:Error) {
throw new Error("error trying to assign value " + obj[name] + " to property " + name + " on " + ret + ". reason: " + e);
}
return ret;
}
}
}
ограничения:
- потерпит неудачу, если ваш класс паникует, если он спамит пустыми значениями при конструировании или если конструктору требуется более 9 аргументов
- не делает и не может выполнять рекурсию, поэтому может просто назначать анонимные объекты или массивы свойствам возвращенного экземпляра
надеюсь, это все равно поможет;)
Greetz
back2dos