Sergiy Shychynov (Sergei Shichinov) Kiev, Ukraine Flex/JavaScript blog (JavaScript, Flex, ActionScript, AS3, AIR) | http://www.linkedin.com/in/shichinov | http://shichinov.moikrug.ru

Wednesday, October 08, 2008

How to get Class of the instance

How to get Class of the instance?

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:

Followers