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

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

public dynamic class Foo {....}

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

myFoo["myNewDynamicProp"] = "bar";

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

Ответы [ 4 ]

7 голосов
/ 12 октября 2011

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

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

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

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

2 голосов
/ 12 октября 2011

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

if (myFoo.hasOwnProperty("myNewDynamicProp")) {
  // do whatever
}
0 голосов
/ 12 октября 2011

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

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

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

...