У нас есть объект класса (объект, который ссылается на классе), так что вы можете создавать объекты из этого объекта класса:Как узнать, на какой класс ссылается объект класса?
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
? Я хочу знать, если это произойдет и что-то с этим поделать.
--- EDIT ---
Поиск Я нашел эту функцию
flash.utils.getQualifiedClassName (значение: *): String Эта функция возвращает имя класса, например:
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 ---
Другой метод состоит в использовании конструктора свойство класса объектов:
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