По сути, это невозможно. И это не имеет никакого отношения к 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 аргументов
- не, а также не может RECURSE, поэтому он может просто назначить анонимные объекты или массивы к свойствам возвращаемого экземпляра
надеюсь, что это помогает в любом случае;)
Greetz
back2dos
Вы можете добавить "в ActionScript" в названии? –
это не actioncript, я просто использую его в actionscript. – 2009-05-22 13:12:05