Dynamic Class
http://keith-hair.net/blog/2009/12/08/listing-class-properties-dynamically-in-as3/#more-119
private var forCompiler:Person;
private function cc():void
{
var obj:Object = createInstance("Person", ["bob", 30]);<br>
}
public function createInstance(className:String, args:Array):Object<br>
{<br>
var myClass:Class = getDefinitionByName(className) as Class;
var instance:Object = new myClass();
instance.initArgs.apply(null, args);
return instance;
}
/*********************************************************************
//In person.initArgs()....
//Note: the constructor also accepts name & age, assigning them default values
//if not specified.
public function initArgs(name:String, age:uint):void
{
this.name = name;
this.age = age;
}
***
function listProperties(obj:Object, accessType:String="readwrite", excludeCommonWith:Class=null, matchesRE:RegExp=null, declaredOnlyByObjClass:Boolean=true):Array
{
var a:XMLList;
var b:Array=[];
var c:*;
var n:int;
var doc:XML;
var cname:String;
matchesRE=matchesRE || new RegExp(".+");
accessType=accessType || "readwrite";
accessType=accessType.toLowerCase();
if (!RegExp(/readwrite|readonly/i).test(accessType)) {
accessType == "readwrite";
}
doc=flash.utils.describeType(obj);
cname=doc.@name;
if (declaredOnlyByObjClass) {
a=doc.accessor.(@access == accessType && @declaredBy == cname && matchesRE["test"](@name));
} else {
a=doc.accessor.(@access == accessType && matchesRE["test"](@name));
}
if (excludeCommonWith != null) {
c=new excludeCommonWith();
}
n=0;
while (n < a.length())
{
if (c != null) {
if (Object(c).hasOwnProperty(a[n].@name) == false) {
b.push(a[n].@name);
}
} else {
b.push(a[n].@name);
}
n++;
}
return b;
}
http://keith-hair.net/blog/2009/12/08/listing-class-properties-dynamically-in-as3/#more-119
Đăng nhận xét