полное переписывание из-за неправильного понимания вопроса
Редактировать Более быстрый способ, чем мое первое предложение, состоит в использовании комбинации flash.utils.getQualifiedClassName
и flash.utils.getQualifiedSuperclassName
в качествепредложил в документации проверить суперкласс каждого класса предков.Вот простая функция, которая сделает это за вас:
function containsAncestor($obj:*,$className:String):Boolean {
var qn:String = getQualifiedClassName($obj);
while(qn != "Object") {
if(qn == $className) return true;
qn = getQualifiedSuperclassName(getDefinitionByName(qn));
}
return false;
}
//////////////////////////////////
//usage example:
//////////////////////////////////
var mc:MovieClip = new MovieClip();
trace(containsAncestor(mc,"flash.display::DisplayObject")); //true
trace(containsAncestor(mc,"flash.display::BitmapData")); //false
Вам нужна функция descriptionType из flash.utils.Это создает XML-представление объекта, включая полный список классов-предков обратно в Object.Начало вывода для MovieClip выглядит следующим образом:
<type name="flash.display::MovieClip" base="flash.display::Sprite" isDynamic="true" isFinal="false" isStatic="false">
<extendsClass type="flash.display::Sprite"/>
<extendsClass type="flash.display::DisplayObjectContainer"/>
<extendsClass type="flash.display::InteractiveObject"/>
<extendsClass type="flash.display::DisplayObject"/>
<extendsClass type="flash.events::EventDispatcher"/>
<extendsClass type="Object"/>
Таким образом, все, что вам остается сделать, это выполнить цикл через узлы extendsClass и проверить наличие DisplayObject
.