我有两种类型定义,如何确定一种是另一种的基本类型?

时间:2011-02-20 18:57:51

标签: flash actionscript-3 reflection

我在ActionScript 3中有两个类型定义(类型为Class的引用),我需要弄清楚一个是另一个的基本类型(类或接口)。

我曾希望以下内容可行,但唉它没有:

var isBaseClass:Boolean = MouseEvent is Event;

为什么它没有,这是可以理解的,但它仍然会很好。我也不能使用describeType,因为对于类型为Class的对象,它实际上并不返回正确的继承链,而是返回类型Class和Object,这根本没有帮助。我可以在循环中使用getQualifiedSuperClassName,直到没有更多超类或匹配为止,但它不太理想,不适用于对接口进行类型检查。

任何人都有更好的主意吗?

3 个答案:

答案 0 :(得分:4)

这是一个使用describeType没有问题的实例:http://wonderfl.net/c/h90R

trace(describeType(MouseEvent)..extendsClass)

输出:

<extendsClass type="Class"/>
<extendsClass type="Object"/>
<extendsClass type="flash.events::Event"/>
<extendsClass type="Object"/>

答案 1 :(得分:1)

我在某个地方看到了这个建议,但在实践中并没有真正尝试过:

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

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

答案 2 :(得分:1)

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

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

Lars回答说,这对我有用。确保基类是第一个(classA)。 isPrototypeOf类似于isSuperClassOf