Есть ли способ узнать фактический тип среды выполнения?
да.
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, тогда как несколько пользователей сказали, что описанный выше метод работает для них.
person
Jeremy
schedule
14.02.2013