Per sé, questo non è possibile. E questo non ha nulla a che fare con ActionScript. Nella maggior parte delle altre lingue si ha lo stesso problema, dal momento che sul lato sinistro si ha un oggetto anonimo, se la lingua supporta qualsiasi cosa o un hash. Ad ogni modo. Ci sono diverse soluzioni, questo sarebbe uno, in grado di gestire un paio di cose:
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;
}
}
}
restrizioni:
- fallirà se il vostro panico di classe, se viene spammato con valori nulli sulla costruzione, o la costruttore ha bisogno di più di 9 argomenti
- non, e anche non può ricorsivi, quindi può semplicemente assegnare gli oggetti anonimi o array alle proprietà dell'istanza restituito
Speranza che aiuta comunque;)
greetz
back2dos
Puoi aggiungere "in ActionScript" per il titolo? –
non è specifico per l'actionscript, mi è capitato di usarlo in actionscript. –