in ActionScript 3.0 you can list all of the ancestors of a class like this:
var theClass:Class = Sprite;
var superName:String;
while (superName != "Object") {
// Retrieve the name of theClass's superclass
superName = getQualifiedSuperclassName(theClass);
trace(superName);
// Retrieve a reference to theClass's superclass
theClass = Class(getDefinitionByName(superName));
}
Output:
flash.display::DisplayObjectContainer flash.display::InteractiveObject flash.display::DisplayObject flash.events::EventDispatcher Object
here's a generalized function that uses the same basic technique to check whether one class inherits from another:
import flash.utils.*;
public function inheritsFrom (descendant:Class,
ancestor:Class):Boolean {
var superName:String;
var ancestorClassName:String = getQualifiedClassName(ancestor);
while (superName != "Object") {
superName = getQualifiedSuperclassName(descendant);
if (superName == ancestorClassName) {
return true;
}
descendant = Class(getDefinitionByName(superName));
}
return false;
}
Usage:
trace("Does Sprite inherit from DisplayObject?");
// Displays: yes
trace(inheritsFrom(Sprite, DisplayObject) ? "yes" : "no");
Posted by moock at June 27, 2007 05:14 PM