【问题标题】:AS3: How to implement instanceOf with classes?AS3:如何用类实现 instanceOf?
【发布时间】:2014-01-15 23:36:47
【问题描述】:

我想实现这个方法

function isInstance(a:Class, b:Class):Boolean;

这就是 AS3 处理类的方式。 请注意,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;
}

【问题讨论】:

标签: actionscript-3 flash class apache-flex casting


【解决方案1】:

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 中弃用。据我了解,在这种情况下,他不能用 is 代替,但如果我错了,请纠正我。任何方式在评论之前阅读文章。

【讨论】:

  • ActionScript 3 中通常不使用原型。我认为您想要的是 'is' 运算符。另请阅读此处了解为什么要避免在 ActionScript 中使用 instanceOf 运算符:opencoder.co.uk/2011/04/instanceof-is-bad-in-actionscript
  • @Reboog711 阅读参考文章,他们知道。
【解决方案2】:

来自ActionScript docs

应该使用 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

在我看来,你正在努力做到这一点。

【讨论】:

  • 您正在将对象与类进行比较,这不是我想要的。看我的问题编辑,很清楚是什么问题。
  • 你是对的; this 将对象实例与类类型进行比较。这正是 instanceOf 所做的,对吧?比较两个对象的用例是什么?
  • 我不想比较两个对象,而是比较两个类。这是我要实现的方法:function isInstance(a:Class, b:Class):Boolean
  • 我的错字,对不起。比较两个类的用例是什么?您是否正在编写某种类型的代码自省工具?
  • 我正在编写自己的事件机制实现,我希望允许类在创建事件之前注册事件。这对工厂非常有用。
猜你喜欢
  • 2012-07-06
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2015-06-10
相关资源
最近更新 更多