#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 как метод в моих классах, но он работает!