Передайте аргументы оператору «new» через массив в ActionScript 3 - PullRequest
4 голосов
/ 28 июля 2011

Как я могу добиться следующего для любого количества элементов в массиве arg?Если бы это была функция, я бы использовал бы Function.apply () , но я не могу понять, как это сделать с помощью оператора new.

var arg:Array = [1,2];
new MyClass( arg[0], arg[1] );

Ответы [ 4 ]

1 голос
/ 28 июля 2011

Если вы настроили свой класс на прием списка аргументов, используя ... args, вы можете передать столько, сколько захотите. Затем в конструкторе вы будете обращаться к ним, как к обычному массиву.

class MyClass 
{
    public function MyClass(... args):void
    {
        //args is an Array containing all the properties sent to the constructor
        trace(args.length);
    }
}
1 голос
/ 29 июля 2011

К сожалению, это невозможно, потому что нет прямого доступа к методу конструктора объекта Class.

Примечание. Если вы будете использовать объект Function для создания своего класса (наследование прототипа), то это будет возможно, но я полагаю, это не вариант для вас.

Вы можете обойти проблему с помощью небольшого (некрасивого) вспомогательного метода, о котором вы можете прочитать здесь: http://jacksondunstan.com/articles/398

1 голос
/ 28 июля 2011

Не передавайте каждый элемент массива, просто передайте массив.

var arg:Array = [1,2];
new MyClass(arg);

Затем внутри вашего класса, переберите массив.

0 голосов
/ 29 июля 2011

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

public function setProps(o:Object, props:Object):* {
 for (var n:String in props) {
   o[n] = props[n];
 }
 return o;
}

.. используйте это так

var args:Object = {x:1, y:2};
var instance:MyClass = setProps( new MyClass(), args ) );

Источник:
http://gskinner.com/blog/archives/2010/05/quick_way_to_se.html

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