2
我们拥有类对象(即引用的类的对象),所以你可以创建该类对象的对象:如何知道Class对象引用了哪个类?
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);
这是行得通的,但是如果我传递一个不引用AClass
的Class对象呢?我想知道这是否会发生,并对此产生影响。
---编辑---
搜索,我发现这个功能
flash.utils.getQualifiedClassName(价值:*):字符串 该函数返回类的名称,例如:
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);
--- EDIT 2 ---
另一种方法是使用Object类的constructor属性:
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();
}
不是转换为AClass并检查它是否为空,为什么不使用'is'运算符? – Turambar 2009-09-10 17:19:59