Wir haben das Klassenobjekt (ein Objekt, das auf eine Klasse verweist), so dass Sie Objekte aus diesem Klassenobjekt erstellen können:
var classObject:Class = package.to.class.AClass;
var objectFromClass:AClass = new classObject();
Nun möchte ich wissen, auf welches Objekt sich die classObject
. Zum Beispiel:
function Creator(classObject:Class):AClass
{
// here I want to know what class is referenced by classObject
return new classObject();
}
var classObject:Class = package.to.class.AClass;
var objectFromClass:AClass = Creator(classObject);
Das funktioniert, aber was ist, wenn ich ein Klassenobjekt übergebe, das nicht auf AClass
? Ich möchte wissen, ob dies der Fall ist und etwas dagegen unternehmen.
--- EDIT ---
Bei der Suche habe ich diese Funktion gefunden
flash.utils.getQualifiedClassName(value:*):String Diese Funktion gibt den Namen der Klasse zurück, zum Beispiel:
var name:String = '';
// name = ''
name = flash.utils.getQualifiedClassName(package.to.class.AClass);
// name = 'AClass'
name = ''
// name = ''
var anInstance:AClass = new AClass();
name = flash.utils.getQualifiedClassName(anInstance);
// name = 'AClass'
Ich muss also nur noch die Ergebnisse dieser Funktion vergleichen:
function Creator(classObject:Class):AClass
{
var anInstance:AClass = new AClass();
var className:String = flash.utils.getQualifiedClassName(anInstance);
var classObjectName:String = flash.utils.getQualifiedClassName(classObject);
// here className and classObjectName are 'AClass' :)
if (className != classObjectName)
throw new Error('The classes are different');
return new classObject();
}
var classObject:Class = package.to.class.AClass;
var objectFromClass:AClass = Creator(classObject);
--- EDIT 2 ---
Eine andere Methode ist die Verwendung der Konstruktoreigenschaft der Klasse Object:
function Creator(classObject:Class):AClass
{
var tempInstance:AClass = new AClass();
var tempClassObject:Class = Object(tempInstance).constructor;
if (classObject != tempClassObject)
throw new Error('The classes are different');
return new classObject();
}