интроспекция свойств внутри класса в flex - PullRequest
1 голос
/ 21 января 2012

Я создаю класс, который имеет несколько свойств и выглядит примерно так:

public dynamic class MyClass{

    public var property1:someObject;
    public var property2:someObject2;
    ...
    public var propertyn:someObjectN;

}

Каждое свойство реализует общий интерфейс.

Я хочу иметь возможность просмотреть все мои свойства и вызвать некоторые функции, определенные интерфейсом, без необходимости распечатывать каждое свойство снова.Примерно так:

public function printSomething():String{
        var printStr:String = '';
        for(var property:String in this){
            if(this[property] is IPrintInterface ){
                printStr += (this[property] as IPrintInterface).printFunction();
            }
        }
        return printStr;
    }

Компилируется нормально, но ничего не печатается.Когда я прохожу через него, кажется, что он пропускает цикл, как будто «this» не имеет никаких свойств ... Кто-нибудь знает, что мне здесь не хватает?

Ответы [ 2 ]

0 голосов
/ 22 января 2012

Он пропускает цикл, потому что в вашем коде:

for(var property:String in this)
{
  if(this[property] is IPrintInterface )
  {
    printStr += (this[property] as IPrintInterface).printFunction();
  }
}

вы сравниваете строковую переменную (свойство) с IPrintInterface, который возвращает ложное значение.

Необходимо преобразовать переменную свойства в IPrintInterface и посмотреть, разрешается ли эта переменная в экземпляр IPrintInterface.

0 голосов
/ 21 января 2012

Это, вероятно, то, что вам нужно - Итерация по объекту в ActionScript 3

...