[英]Enumerating class properties
我試圖遍歷自定義類的屬性,但是, Adobe提供的方法似乎不起作用。 我沒有收到編譯或運行時錯誤。
類
package {
public dynamic class enum {
public var foo:Number = 123;
public function enum() {
this.setPropertyIsEnumerable("foo", true);
if (this.propertyIsEnumerable("foo") == false) {
trace("foo:" + foo + " is not enumerable.")
}
}
}
}
// outputs "foo:bar is not enumerable."
Implementaiton
var test:enum = new enum();
for (var property:String in test) {
trace(property);
}
// outputs nothing
我試圖保持我的代碼快速靈活,所以當您必須將類更改為Dynamic以便能夠在屬性上for ... in
時,這確實令人沮喪。 傑克遜·鄧斯坦(Jackson Dunstan)的測試證實,這可能比靜態類的屬性慢400倍 ,但是必須顯式地引用這些屬性 (對於不可知論的屬性而言這是不切實際的),或者使用類的反射(在計算上昂貴)才能訪問。
我發現避開整個問題的唯一方法是使用動態聲明的變量……這是沒有意義的,因為在那一點上,使用setPropertyIsEnumerable(prop,true)是多余的; 所有動態創建的屬性均已枚舉。 此外,不能對動態變量進行嚴格的數據類型化,並且性能超出了預期。
例如...
類
package {
public dynamic class enum {
public var foo:String = "apple";
public function enum(){
this.dynamicVar = "orange";
this.dynamicProp = "banana";
this.setPropertyIsEnumerable("foo", true);
this.setPropertyIsEnumerable("dynamicProp", false);
}
}
}
履行
var test:enum = new enum();
for (var key:String in test) {
trace(key + ": " + test[key]); // dynamicVar: 1
}
// outputs "dynamicVar: orange"
現在,該類是動態的,我們看到只對3個測試屬性之一進行了迭代。 應該有2。
幾乎感覺像Adobe要我們養成不良的編程習慣。 話讓我失望...
非動態類不提供可枚舉的屬性或方法。
如您提供的鏈接說明中所述。
我認為您可能想在這種方法上重構代碼。 我從來沒有像您在這里那樣遍歷類的屬性。 如果要動態跟蹤項目,則應使用關聯數組並以這種方式跟蹤它們,而不是像在做的那樣在類級別進行跟蹤。
如果要進行強數據鍵入,請使用向量。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.