Actionscript 3 如何知道类对象引用的是什么类?

Actionscript 3 如何知道类对象引用的是什么类?,actionscript-3,class,oop,Actionscript 3,Class,Oop,我们有类对象(引用类的对象),因此您可以从该类对象创建对象: var classObject:Class = package.to.class.AClass; var objectFromClass:AClass = new classObject(); 现在,我想知道classObject引用了什么对象。例如: function Creator(classObject:Class):AClass { // here I want to know what class is refer

我们有类对象(引用类的对象),因此您可以从该类对象创建对象:

var classObject:Class = package.to.class.AClass;
var objectFromClass:AClass = new classObject();
现在,我想知道
classObject
引用了什么对象。例如:

function Creator(classObject:Class):AClass
{
    // here I want to know what class is referenced by classObject
    return new classObject();
}

var classObject:Class = package.to.class.AClass;
var objectFromClass:AClass = Creator(classObject);
var name:String = '';
// name = ''

name = flash.utils.getQualifiedClassName(package.to.class.AClass);
// name = 'AClass'

name = ''
// name = ''

var anInstance:AClass = new AClass();
name = flash.utils.getQualifiedClassName(anInstance);
// name = 'AClass'
这是可行的,但是如果我传递了一个不引用
AClass
的类对象呢?我想知道这件事是否发生了,并对它做点什么

---编辑---

我找到了这个函数

flash.utils.getQualifiedClassName(值:*):字符串 此函数返回类的名称,例如:

function Creator(classObject:Class):AClass
{
    // here I want to know what class is referenced by classObject
    return new classObject();
}

var classObject:Class = package.to.class.AClass;
var objectFromClass:AClass = Creator(classObject);
var name:String = '';
// name = ''

name = flash.utils.getQualifiedClassName(package.to.class.AClass);
// name = 'AClass'

name = ''
// name = ''

var anInstance:AClass = new AClass();
name = flash.utils.getQualifiedClassName(anInstance);
// name = 'AClass'
因此,我所要做的就是比较该函数的结果:

function Creator(classObject:Class):AClass
{
    var anInstance:AClass = new AClass();
    var className:String = flash.utils.getQualifiedClassName(anInstance);
    var classObjectName:String = flash.utils.getQualifiedClassName(classObject);

    // here className and classObjectName are 'AClass' :)
    if (className != classObjectName)
        throw new Error('The classes are different');

    return new classObject();
}

var classObject:Class = package.to.class.AClass;
var objectFromClass:AClass = Creator(classObject);
---编辑2---

另一种方法是使用对象类的构造函数属性:

function Creator(classObject:Class):AClass
{
    var tempInstance:AClass = new AClass();
    var tempClassObject:Class = Object(tempInstance).constructor;

    if (classObject != tempClassObject)
        throw new Error('The classes are different');

    return new classObject();
}

我发现完成此任务最简单(不知道是否最快)的方法是在下一个示例中:

function Creator(classObject:Class):AClass
{
    var anInstance:Object = new classObject() as AClass;
    if (anInstance == null)
        throw new Error('The classes are different');

    return new classObject(); // or return anInstance as AClass;
}

如果
AClass
是一个接口,这也适用。

与其强制转换到AClass并检查它是否为null,为什么不使用“is”操作符呢?