代码之家  ›  专栏  ›  技术社区  ›  Rowan

AS3检查类是否扩展了另一个类

  •  1
  • Rowan  · 技术社区  · 14 年前

    在AS3中,我试图检查一个对象是一个特定类的实例,还是扩展了一个特定类。使用类似于 if (object is ClassName) 如果对象是 ClassName 延伸 类名 .

    class Foo {}
    class Bar extends Foo {}
    
    var object = new Bar();
    
    if (object is Foo){ /* not executed */ }
    if (object is Foo){ /* is executed */ }
    

    我想要这样的东西:

    class Foo {}
    class Bar extends Foo {}
    
    var object = new Bar();
    
    if (object is Foo){ /* is executed */ }
    

    有什么想法吗?

    4 回复  |  直到 14 年前
        1
  •  5
  •   OXMO456    14 年前
    package {
     import flash.display.Sprite;
    
    
    
    public class Main extends Sprite {
      public function Main() {
       var bar:Bar=new Bar();
       trace("bar is Bar",bar is Bar);//true
       trace("bar is Foo:",bar is Foo);//true
       trace("bar is IKingKong:",bar is IKingKong);//true
       trace(describeType(bar));
       //<type name="Main.as$0::Bar" base="Main.as$0::Foo" isDynamic="false" isFinal="false" isStatic="false">
       //<extendsClass type="Main.as$0::Foo"/>
       //<extendsClass type="Object"/>
       //<implementsInterface type="Main.as$0::IKingKong"/>
       //</type>
      }
     }
    }
    interface IKingKong{}
    class Foo implements IKingKong{}
    class Bar extends Foo{}
    
        2
  •  1
  •   orochi    13 年前

    你可以这样做:

    class Foo {}
    class Bar extends Foo {}
    
    var object = new Bar();
    
    if (object as Foo != null) { /* is executed */ }
    
        3
  •  0
  •   PatrickS    14 年前

    使用接口或abtract类,您应该能够做到这一点

     var object:Foo = new Bar();
     if (object is Foo){ /* is executed */ }
    
     //or
     var object:IFoo = new Bar();
     if (object is IFoo){ /* is executed */ }
    
        4
  •  0
  •   Chunky Chunk    14 年前
    package
    {   
    import flash.display.Sprite;
    import flash.utils.getQualifiedSuperclassName;
    
    public class Test extends Sprite
        {
        public function Test()
            {
            trace(getQualifiedSuperclassName(this)); //returns "flash.display::Sprite"
            }
        }
    }