forked from: SO xml namespace access
forked from SO xml namespace access (diff: 147)
ActionScript3 source code
/**
* Copyright pleclech ( http://wonderfl.net/user/pleclech )
* MIT License ( http://www.opensource.org/licenses/mit-license.php )
* Downloaded from: http://wonderfl.net/c/owdG
*/
package {
import flash.display.Sprite;
import flash.utils.ByteArray;
import flash.utils.getQualifiedSuperclassName;
import flash.utils.getQualifiedClassName;
import flash.utils.describeType;
import flash.utils.Dictionary;
import flash.events.Event;
import flash.utils.setTimeout;
import com.bit101.components.TextArea;
import flash.utils.getDefinitionByName;
final public class FlashTest extends Sprite {
public function FlashTest() {
if (!stage.getChildByName("DoTest")) {
var doTest:DoTest=new DoTest();
stage.addChild(doTest);
setTimeout(function():void{doTest.run();}, 500);
}
}
/*
public function doTest():void {
trace("hello");
setTimeout(function():void{
try {
var t:*= new FlashTest();
// trace("t",t)
} catch (e:*){
trace("error",e);
}
}, 500);
// var r:IRequest=new Request("", "FlashTest", "a.b.c.ping", [trace, "hello world"]);
// r.execute();
}
*/
}
}
import com.bit101.components.TextArea;
import flash.utils.describeType;
class DoTest extends TextArea {
function DoTest(){
name="DoTest";
width=400;
height=400;
}
public function trace(...args):void {
text=text + args.join(", ")+"\n"
}
public function run():void {
var a:Object={};
a.b=[1,2];
a.b["hello"] = "world";
trace(a.b.length);
for (var i:* in a.b) trace(i);
trace("running test");
var o:Object=new A().b;
trace(o is Function)
o=new B().c;
trace(o is Function)
// var cl:Class=getDefinitionByName("::FlashTest") as Class;
// if (cl)
// trace(describeType(new cl()));
// var t:*=new FlashTest();
}
}
interface IRequest {
function get packagePath():String;
function get className():String;
function get functions():Vector.<String>;
function get parameters():Array;
function execute():void;
}
import flash.utils.getDefinitionByName;
class Request implements IRequest {
private var _pp:String="";
private var _cn:String="";
private var _fns:Vector.<String>=new Vector.<String>();
private var _pms:Array=[];
function Request(packagePath:String, className:String, functions:String, parameters:Array){
_pp=packagePath;
_cn=className;
_fns=Vector.<String>(functions.split("."));
_pms=parameters;
}
public function get packagePath():String {
return _pp;
}
public function get className():String {
return _cn;
}
public function get functions():Vector.<String>{
return _fns;
}
public function get parameters():Array{
return _pms;
}
public function execute():void {
var fnLen:int = _fns.length - 1;
if (fnLen < 0) return;
var cl:Class = getDefinitionByName(_pp+"::"+_cn) as Class;
if (cl) {
var o:Object=new cl();
for (var i:int=0; i < fnLen; i++) {
var fnName:String=_fns[i];
if (!o.hasOwnProperty(fnName)) break;
var fn:Object=o[fnName];
if (fn.hasOwnProperty("apply")) {
o=fn.apply(o);
} else {
o=fn;
}
}
fnName=_fns[fnLen];
if (!o.hasOwnProperty(fnName)) return;
fn=o[fnName];
if (fn.hasOwnProperty("apply")) {
fn.apply(o, _pms);
}
}
}
}
class C {
public function ping(traceFn:Function, msg:String):void {
traceFn(msg);
}
}
class B {
private var _c:C=new C();
public function c():C{
return _c;
}
}
class A {
private var _b:B=new B();
public function get b():B{
return _b;
}
}
