如何判断Actionscript对象是否具有某个动态属性?

时间:2011-10-12 17:35:03

标签: actionscript-3 flex dynamic

我有一个动态的Actionscript类,如下所示:

public dynamic class Foo {....}

在我的代码中我(可能)添加一些属性:

myFoo["myNewDynamicProp"] = "bar";

在我的代码中,给定一个类Foo的实例,如何确定是否已添加该动态属性而不抛出昂贵的异常?

4 个答案:

答案 0 :(得分:7)

你可以做三件事之一。首先,调用dyanmic实例上不存在的属性不会引发异常。它只返回undefined,因此您可以测试它。或者您可以使用in关键字。或者您可以使用hasOwnProperty()方法。

请考虑以下事项:

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

您也可以像第一个示例一样轻松使用括号表示法:myFoo['nothing']

答案 1 :(得分:2)

使用hasOwnProperty(属性名称)方法:

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

答案 2 :(得分:2)

您还可以使用以下方法遍历任何动态类的属性:

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

通过这种方式,您不仅可以检查所需的属性,还可以使用整体(动态)类属性执行更多操作。

答案 3 :(得分:-1)

您应该能够像这样进行简单的空检查:

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

希望有所帮助