2011-10-12 43 views
3

我有一個動態的ActionScript類如下:如何判斷一個Actionscript對象是否具有某個動態屬性?

public dynamic class Foo {....} 

在我的代碼(可能)的一些屬性添加到它:,

myFoo["myNewDynamicProp"] = "bar"; 

其他地方在我的代碼中給出Foo類的一個實例,我如何確定該動態屬性是否已經添加,而不會拋出昂貴的異常?

回答

7

你可以做三件事之一。首先,調用dyanmic實例中不存在的屬性不會引發異常。它只返回undefined,所以你可以測試一下。或者您可以使用in關鍵字。或者您可以使用hasOwnProperty()方法。 myFoo['nothing']

2

使用該hasOwnProperty(屬性名)方法:

if (myFoo.hasOwnProperty("myNewDynamicProp")) { 
    // do whatever 
} 
-1

您應該只可以做一個簡單的空檢查是這樣的:

if(myFoo.myNewDynamicProp) { 
    //you can access it 
} 

希望幫助

+0

這不起作用。 – HDave

+0

啊,很好的電話,就這個答案衝了一下。只有在對Foo類定義的屬性進行空檢查時纔有效。謝謝。那麼選擇的答案的第一個例子不會工作嗎? – eak12913

+0

顯然,當查詢一個不存在的動態屬性時,Flex會返回「undefined」。但真正的答案是方法「hasOwnProperty」,它甚至不會在Eclipse中顯示爲我的類的方法,但它的工作原理! – HDave

2

您也可以遍歷任何動態類的屬性,使用此:

考慮以下幾點:

var myFoo:Foo = new Foo(); 

myFoo.newProp = "bar"; 

trace(myFoo.newProp != undefined); // true 
trace(myFoo.nothing != undefined); // false 

trace("newProp" in myFoo); // true 
trace("nothing" in myFoo); // false 

trace(myFoo.hasOwnProperty("newProp")); // true 
trace(myFoo.hasOwnProperty("nothing")); // false 

你也可以很容易地使用括號標記的第一個例子

for (var propertyName:String in myFoo) 
{ 
    trace("Property " + propertyName + ": " + myFoo[propertyName]); 
    if (propertyName == "myNewDynamicProp") 
    { 
     // found 
     // may be do something 
    } 
} 

這樣,您不僅可以檢查所需的屬性,還可以對整體(動態)類屬性進行更多操作。

相關問題