The standard approach is to use "constructor" field of the instance. But yesterday I found out that it's absent in my class instances and following code leads to Syntactic error:
var dat:shData = new shData();
//var clas:* = dat.constructor; error Syntax Error
while Object class instances still workvar dat:Object= new Object();
var clas:* = dat.constructor; // its Ok
Using something like http://livedocs.adobe.com/flex/3/langref/flash/net/package.html#getClassByAlias()
getClassByAlias(getQualifiedClassName(object));smells bad because to work properly it needs preliminary call to registerClassAlias()
Using http://livedocs.adobe.com/flex/3/langref/flash/utils/package.html#getDefinitionByName()
var datClass:Class = getDefinitionByName(getQualifiedClassName(dat)) as Class;looks inattractive too...
So this is my investigation
var dat:shData = new shData();
var obj:Object = new shData();
//var clas:* = dat.constructor; error Syntax Error
var clas1:* = obj.constructor;
var c1:* = getQualifiedClassName(dat);
var c2:* = getQualifiedClassName(obj);
//var c3:* = getClassByAlias(getQualifiedClassName(dat)); ReferenceError: Error #1014: Class com.os.core::shData could not be found. at global/flash.net::getClassByAlias()
//var c4:* = getClassByAlias(getQualifiedClassName(obj)); ReferenceError: Error #1014: Class com.os.core::shData could not be found. at global/flash.net::getClassByAlias()
obj = dat;
var clas2:* = obj.constructor;
var clas3:* = Object(dat).constructor;
var obj2:Object = Object(dat);
var obj3:Object = dat as Object;
var clas4:* = obj2.constructor;
var clas5:* = obj3.constructor;
// Resume
var datClass:Class = Object(dat).constructor;
And that is the result:
var datClass:Class = Object(dat).constructor;
No comments:
Post a Comment