我有一个动态的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