如何在ActionScript 3中检查超类中的子类类型

时间:2012-11-07 15:36:29

标签: actionscript-3

我想在超类中获取子类类型。 我试过了

if(this is SubClass1)

在超级班 但失败了。

2 个答案:

答案 0 :(得分:2)

您的代码有效:

package{
    import flash.display.Sprite;

    public class TestSuperClass extends Sprite{
        public function TestSuperClass(){
            super();
            trace((new SuperClass).isSubclass); // Output : false
            trace((new Extended).isSubclass); // Output : true
        }
    }
}

internal class SuperClass
{
    public function get isSubclass() : Boolean{
        return this is Extended;
    }
}

internal class Extended extends SuperClass {}

你可以动态地做(这很丑陋,不是性能友好,但它可以做到这一点):

package{
    import flash.display.Sprite;

    public class TestSuperClass extends Sprite{
        public function TestSuperClass(){
            super();

            trace((new SuperClass).isSubclass); // Output : false
            trace((new SuperClass).superClass); // Output : Object
            trace((new Extended).isSubclass); // Output : true
            trace((new Extended).superClass); // Output : SuperClass
        }
    }
}
import flash.utils.describeType;

internal class SuperClass
{
    public function get isSubclass() : Boolean{
        return describeType(this).@base.toString() != "Object";
    }

    public function get superClass() : String
    {
        return describeType(this).@base.toString().split("::").pop();
    }
}

internal class Extended extends SuperClass {}

答案 1 :(得分:2)

超级班不知道他的子类,不应该知道。子类扩展了他的超类,所以应该知道他的超类。

你想要实现的目标是不可能的。应该有另一种(更好的)方法来解决您的问题/架构。