У меня есть два определения типа, как я могу определить, является ли один базовым типом другого? - PullRequest
2 голосов
/ 20 февраля 2011

У меня есть два определения типа (ссылки на тип Class) в ActionScript 3, и мне нужно выяснить, является ли одно базовым типом (классом или интерфейсом) другого.

Я надеялся, что-то вродеСледующее сработало бы, но, увы, не сработало:

var isBaseClass:Boolean = MouseEvent is Event;

Понятно, почему это не так, но все равно было бы неплохо.Я также не могу использовать descriptionType, поскольку для объектов типа Class он на самом деле не возвращает правильную цепочку наследования, а просто возвращает типы Class и Object, что совсем не помогает.Я могу использовать getQualifiedSuperClassName в цикле до тех пор, пока не останется больше суперклассов или не будет найдено совпадение, но оно не идеально и не работает для проверки типов по интерфейсам.

Любойесть идея получше?

Ответы [ 3 ]

4 голосов
/ 20 февраля 2011

Вот живой пример, использующий descriptionType без проблем: http://wonderfl.net/c/h90R

trace(describeType(MouseEvent)..extendsClass)

output:

<extendsClass type="Class"/>
<extendsClass type="Object"/>
<extendsClass type="flash.events::Event"/>
<extendsClass type="Object"/>
1 голос
/ 14 января 2012
var classA:Class = Event;
var classB:Class = MouseEvent;

trace(classA.prototype.isPrototypeOf(classB.prototype)); 

Как ответил Ларс, это работает для меня. Убедитесь, что базовый класс является первым (classA). isPrototypeOf аналогично isSuperClassOf.

1 голос
/ 20 февраля 2011

Я видел это где-то, но я на самом деле не пробовал на практике:

var classA:Class = Event;
var classB:Class = MouseEvent;

trace(classA.prototype.isPrototypeOf(classB.prototype)); 
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...