get the class of any object

...and also create another instance of it 

The application mxml:


<?xml version="1.0" encoding="utf-8"?>
<mx:Application xmlns:mx="http://www.adobe.com/2006/mxml" layout="absolute" applicationComplete="test()" viewSourceURL="srcview/index.html">
<mx:Script>
<![CDATA[
import mx.controls.NumericStepper;
import flash.utils.getQualifiedClassName;

private function test():void {
var o1:MovieClip = new MovieClip();
var o2:NumericStepper = new NumericStepper();
var o3:Object = new TestClass();

testResults.text += getObjectClass(o1);
testResults.text += "\n" + getObjectClass(o2);
testResults.text += "\n" + getObjectClass(o3);

testResults.text += "\n\n\nDuplication:";
testResults.text += "\n\nobj1:" + newInstanceOf(o1);
testResults.text += "\n\nobj2:" + newInstanceOf(o2);
testResults.text += "\n\nobj3:" + newInstanceOf(o3);


}


private function getObjectClass(obj:*):Class {
var className:String = getQualifiedClassName(obj);
var classOfObj:Class = ApplicationDomain.currentDomain.getDefinition(className) as Class;

return classOfObj;
}

private function newInstanceOf(obj:*):Object {
var objectClass:Class = getObjectClass(obj);

if(objectClass) {
return new objectClass();
}

return null;
}


]]>
</mx:Script>

<mx:Text id="testResults"/>

</mx:Application>

The TestClass class (save it in the same folder as the mxml, in a file called TestClass.as):


package
{
public class TestClass
{
public function TestClass()
{
trace("this is just a test class");
}

}
}