我想实现这个方法
function isInstance(a:Class, b:Class):Boolean;
这就是AS3如何使用Classes。 请注意MovieClip扩展Sprite。
trace(MovieClip is Sprite); // false
trace(Sprite is MovieClip); // false
trace(Sprite is Sprite); // false
trace(Sprite is Object); // true
我一直在尝试下一个代码,但它无效:
/**
* return if instance of class 'a' can be cast to instant of class 'b'
*/
private function isInstance(a:Class, b:Class):Boolean{
var superclass:Class = a;
do {
if (superclass == b) {
return true;
}
superclass = getSuperClass(a);
} while (superclass != null);
return false;
}
private function getSuperClass(claz:Class):Class{
var qualifiedSuperclassName:String = getQualifiedSuperclassName(claz);
var returnValue:Class = getDefinitionByName(qualifiedSuperclassName) as Class;
return returnValue;
}
答案 0 :(得分:0)
在此site中找到解决方案。
这很简单:
private function isSubclassOfSkyboy(a:Class, b:Class): Boolean
{
if (int(!a) | int(!b)) return false;
return (a == b || a.prototype instanceof b);
}
此处使用了 instanceof ,已从as3弃用。据我所知,在这种情况下他不能被 取代,但如果我错了,请纠正我。在评论之前,请以任何方式阅读文章。
答案 1 :(得分:0)
应该使用is运算符而不是instanceof运算符 手动类型检查,因为表达式x instanceof y 检查x的原型链是否存在y(并且在 ActionScript 3.0,原型链没有提供完整的 继承层次结构的图片。)
他们的样本:
var mySprite:Sprite = new Sprite();
trace(mySprite is Sprite); // true
trace(mySprite is DisplayObject);// true
trace(mySprite is IEventDispatcher); // true
听起来我觉得你正在努力做到这一点。