2012-11-08 55 views
2

如何迭代類實例的所有變量?它似乎經常對象的工作 ...AS3迭代類變量

編輯:這將做=)

var test:anyClass=new anyClass(); 
var someObject:Object={val1:"object string",val2:111,val3:new Date()}; 
var xmlList:XMLList=describeType(anyClass)..variable; 
for each(var key:* in someObject) 
    trace(String(key)); 
for each(var item:XML in xmlList) 
    trace(String(test[[email protected]])); 

輸出: 對象字符串週四11月8日十一時十九分27秒GMT-0700 2012 類字符串週四11月8日11時19分27秒GMT-0700 2012

public class anyClass 
{ 
    public var val1:String="class string"; 
    public var val2:int=222; 
    public var val3:Date=new Date(); 
} 
+0

拿在Object類中看看這個屬性http://help.adobe.com/en_US/FlashPlatform/reference/actionscript/3/Object.html#propertyIsEnumerable ()和http://help.adobe.com/en_US/FlashPlatform/reference/actionscript/3/Object.html#setPropertyIsEnumerable() – GeorgeCross

回答

5

我認爲最簡單的方法是使用flash.utils.describeType()

http://help.adobe.com/en_US/FlashPlatform/reference/actionscript/3/flash/utils/package.html#describeType()

這將返回描述類,然後你就可以正常E4X攻擊的所有詳細信息的XML文檔。下面是我測試過的例子:

import flash.display.Sprite; 
import flash.utils.describeType; 

var test:String = "TEST"; 

function DescribeTypeExample():void { 
    var child:Sprite = new Sprite(); 
    var description:XML = describeType(this); 
    var variables:XMLList = description..variable; 
    for each(var variable:XML in variables) { 
     trace("VARIABLE: " + [email protected]); 
     trace("VALUE: " + this[[email protected]]); 
    } 
} 

this.DescribeTypeExample(); 

// Output: 

// VARIABLE: test 
// VALUE: TEST 
+0

哦,很好,我已經看到了,但我雖然,「也許這真的很有必要」 。原來我錯了... 而即時通訊使用它從一個可綁定的ArrayCollection的項目,所以訪問器爲我做。 – Ziul

+0

我意識到一個普通的Sprite沒有任何變量(D'oh!),所以變成了另一個我測試過的例子。如果訪問器爲你工作,那麼很好。 – JcFx

+0

嘿傢伙我無法檢索一個不動態類的變量是否有任何方法可以做到這一點? –