Есть ли способ получить фактический тип времени выполнения?
Да.
var actualRuntimeType:Class = Object(yourInstance).constructor;
Некоторые другие ответы уже относятся к .constructor
, но вы не всегда можете напрямую получить доступ к .constructor
в ActionScript 3. Он доступен только для dynamic
классов, а большинство классов этого не делают. Попытка использовать его в обычном классе приведет к ошибке времени компиляции с настройками по умолчанию.
Однако, поскольку каждый класс наследует от Object
, то есть dynamic
, мы можем найти их свойство .constructor
, просто приведя экземпляр к Object
.
Поэтому, если нас не интересуют подклассы, мы можем подтвердить, что два экземпляра относятся к одному и тому же классу, просто оценив это:
Object(instanceA).constructor === Object(instanceB).constructor;
Я узнал об этом из поста Джоша Тыняла " Получить класс, используемый для создания экземпляра объекта в AS3 ".
Еще более простая альтернатива, которая также работает для меня, это просто:
var actualRuntimeType:Class = yourInstance["constructor"];
Среда выполнения полностью способна дать вам .constructor
, просто компилятор жалуется, если вы используете этот синтаксис. Использование ["constructor"]
должно привести к тому же байт-коду, но компилятор не достаточно умен, чтобы остановить вас.
Я включил эту секунду, потому что она не была протестирована нигде, кроме моей текущей среды Flash, в то время как несколько пользователей сказали, что описанный выше метод работает для них.