Gibt es eine Möglichkeit, den tatsächlichen Laufzeittyp zu bekommen?
Ja.
var actualRuntimeType:Class = Object(yourInstance).constructor;
Einige andere Antworten beziehen sich bereits auf .constructor
, aber man kann nicht immer direkt zugreifen .constructor
in Actionscript 3.Es ist nur auf dynamic
Klassen zugänglich, die meisten Klassen nicht. Der Versuch, es in einer regulären Klasse zu verwenden, führt unter den Standardeinstellungen zu einem Fehler bei der Kompilierung.
Da jedoch jede Klasse von Object
erbt, die dynamic
ist, können wir ihre .constructor
Eigenschaft schauen nur durch eine Instanz Object
Gießen.
Deshalb, wenn wir in Unterklassen nicht interessiert sind, können wir bestätigen, dass zwei Instanzen von genau der gleichen Klasse sind, indem einfach diese Auswertung:
Object(instanceA).constructor === Object(instanceB).constructor;
ich dieses von der Post gelernt „Get the class used to create an object instance in AS3“ von Josh Tynjälä .
Eine noch einfachere Alternative, die auch für mich funktioniert ist:
var actualRuntimeType:Class = yourInstance["constructor"];
Die Laufzeit durchaus in der Lage ist, Ihnen die .constructor
geben, es ist nur, dass der Compiler beschwert sich, wenn Sie diese Syntax verwenden. Die Verwendung von ["constructor"]
sollte den gleichen Bytecode erzeugen, aber der Compiler ist nicht clever genug, um Sie zu stoppen.
Ich habe diese Sekunde aufgenommen, weil sie nirgendwo außer meiner aktuellen Flash-Umgebung getestet wurde, während mehrere Benutzer gesagt haben, dass die oben beschriebene Methode für sie funktioniert.
Sie würden denken, dass dies das Standardverhalten wäre, aber ActionScript wusste ... besser? –
Ich glaube, 'getQualifiedClassName' ist langsamer als der 'ist'-Operator. Es ermöglicht jedoch auch einen Vergleich mit Strings anstelle von Klassen, was nützlich sein kann, um die Kompilierung von Klassen zu vermeiden, die Sie nicht verwenden (die aber immer noch nach Objekttypen suchen können). – ericsoco