我有一個動態的ActionScript類如下:如何判斷一個Actionscript對象是否具有某個動態屬性?
public dynamic class Foo {....}
在我的代碼(可能)的一些屬性添加到它:,
myFoo["myNewDynamicProp"] = "bar";
其他地方在我的代碼中給出Foo類的一個實例,我如何確定該動態屬性是否已經添加,而不會拋出昂貴的異常?
我有一個動態的ActionScript類如下:如何判斷一個Actionscript對象是否具有某個動態屬性?
public dynamic class Foo {....}
在我的代碼(可能)的一些屬性添加到它:,
myFoo["myNewDynamicProp"] = "bar";
其他地方在我的代碼中給出Foo類的一個實例,我如何確定該動態屬性是否已經添加,而不會拋出昂貴的異常?
你可以做三件事之一。首先,調用dyanmic實例中不存在的屬性不會引發異常。它只返回undefined
,所以你可以測試一下。或者您可以使用in
關鍵字。或者您可以使用hasOwnProperty()
方法。 myFoo['nothing']
使用該hasOwnProperty(屬性名)方法:
if (myFoo.hasOwnProperty("myNewDynamicProp")) {
// do whatever
}
您應該只可以做一個簡單的空檢查是這樣的:
if(myFoo.myNewDynamicProp) {
//you can access it
}
希望幫助
您也可以遍歷任何動態類的屬性,使用此:
考慮以下幾點:
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
}
}
這樣,您不僅可以檢查所需的屬性,還可以對整體(動態)類屬性進行更多操作。
這不起作用。 – HDave
啊,很好的電話,就這個答案衝了一下。只有在對Foo類定義的屬性進行空檢查時纔有效。謝謝。那麼選擇的答案的第一個例子不會工作嗎? – eak12913
顯然,當查詢一個不存在的動態屬性時,Flex會返回「undefined」。但真正的答案是方法「hasOwnProperty」,它甚至不會在Eclipse中顯示爲我的類的方法,但它的工作原理! – HDave