2011-10-12 66 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 
    } 
} 

这样,您不仅可以检查所需的属性,还可以对整体(动态)类属性进行更多操作。

相关问题