Как я могу определить, имеет ли объект Actionscript определенное динамическое свойство?

#actionscript-3 #apache-flex #dynamic

#actionscript-3 #apache-flex #динамический

Вопрос:

У меня есть динамический класс Actionscript следующим образом:

 public dynamic class Foo {....}
  

В моем коде я (могу) добавить к нему некоторые свойства:

 myFoo["myNewDynamicProp"] = "bar";
  

В другом месте моего кода, учитывая экземпляр класса Foo, как я могу определить, было ли добавлено это динамическое свойство, не создавая дорогостоящего исключения?

Ответ №1:

Вы можете сделать одну из трех вещей. Во-первых, вызов свойства, которое не существует в экземпляре 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']

Ответ №2:

Для этого используйте метод hasOwnProperty(имя свойства) :

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

Ответ №3:

Вы также можете перебирать свойства любого динамического класса, используя это:

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

Таким образом, вы можете не только проверить наличие желаемого свойства, но и сделать больше с общими (динамическими) свойствами класса.

Ответ №4:

Вы должны просто иметь возможность выполнить простую проверку null следующим образом:

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

Надеюсь, это поможет

Комментарии:

1. А, хороший вызов, немного поторопился с этим ответом. Будет работать только для проверки на нулевое значение свойства, определенного в классе Foo. Спасибо. Разве первый пример выбранного ответа тогда тоже не сработал бы?

2. По-видимому, Flex возвращает «undefined» при запросе несуществующего динамического свойства. Но реальным ответом был метод «hasOwnProperty», который даже не отображается в Eclipse как метод в моих классах, но он работает!