Flash AS3: автоматизировать присвоение свойств новому экземпляру из аргументов в конструкторе - PullRequest
0 голосов
/ 09 апреля 2010

Мне нравится узнавать о хитрых новых способах делать вещи. Допустим, у вас есть класс со свойством, которому в конструкторе присваивается значение аргумента, например:

package{
 public class SomeClass{
  private var someProperty:*;
  public function SomeClass(_someProperty:*):void{
   someProperty = _someProperty;
  }
 }
}

Это не совсем хлопот. Но представьте, у вас есть ... Я не знаю, пять свойств. Десять свойств, возможно. Вместо того, чтобы записывать каждое отдельное присваивание построчно, не существует ли способа перебрать аргументы конструктора и соответственно установить значение каждого соответствующего свойства в новом экземпляре? Я не думаю, что объекты ...rest или arguments будут работать, поскольку они содержат только перечислимый список аргументов, а не имена аргументов - я думаю, что-то вроде этого было бы лучше:

for(var propertyName:String in argsAsAssocArray){this[propertyName] = argsAsAssocArray[propertyName];}

... что-то подобное существует?

Ответы [ 2 ]

1 голос
/ 09 апреля 2010

Нет, нет. Вот что я использую, хотя:

class A {
    private var arg1:Type1;
    private var arg2:Type2;
    private var arg3:Type3;
    private var arg4:Type4;
    private static const PARAMS:Array = "arg1,arg2,arg3,arg4".split(",");
    public function A(arg1:Type1, arg2:Type2, arg3:Type3, arg4:Type4) {
        var i:uint = 0;
        for each (var name:String in PARAMS) this[name] = arguments[i++];
    }
}

Вы можете проверить Haxe . Он имеет много преимуществ перед AS3 и обеспечивает решение даже этой проблемы, используя rtti , который в отличие от AS3 rtti также содержит имена параметров метода.

0 голосов
/ 09 апреля 2010

Использование класса отражения descriptionType , вероятно, предоставляет наиболее интересную информацию об аргументах, но, к сожалению, имена свойств также отсутствуют.

...