as3: использование объекта для передачи аргументов в любом порядке - конфигурация класса - PullRequest
1 голос
/ 03 марта 2010

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

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

private var _reqVar:String;
private var _optVar1:String;
private var _optVar2:String;

public function Constructor(reqVar:String, optVar1:String = "empty", optVar2:String = "empty){

    // set the variable to equal the arguments here...

} 

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

в идеале я хотел бы передать аргументы, хотя и похожие на это:

var instance:ClassType = new ClassType(reqVar, {width:100, height:100, speed:4, lives:3})

, что опять-таки довольно просто. где я натыкаюсь на следующие пункты:

  • присвоение аргумента переменной var того же ключа (я знаю, что в php для ссылки на имя переменной из ключа вы можете использовать $$ key = $ value, есть ли эквивалент в as3?)
  • отображать ошибку (используя метод throw) для имен переменных, не поддерживаемых классом

любая помощь приветствуется.

1 Ответ

2 голосов
/ 03 марта 2010

Обновленный ответ:

public function Test(reqVar, optionalVars:Object)
{
    for (var prop:String in optionalVars)
    {
        try
        {
            this[prop] = optionalVars[prop];
        }
        catch (error:Error)
        {
            throw new Error("Unknown property: " + prop);
        }
    }

}

Итак, ответы на ваши вопросы:

  • Вы присваиваете свойству или переменной по имени, используя object[NAME], в данном случае this['propertyName'].
  • Вы можете проверить, существует ли свойство, используя hasOwnProperty. Обновление: Если вы также хотите назначить переменную, отличную от свойств, я не думаю, что вы можете проверить, существуют ли они. Чтобы решить эту проблему, вы можете просто предположить, что они существуют, присвоить им и получить ошибку, когда вы используете недопустимое имя переменной. Вы также можете обернуть это назначение в блок try ... catch и создать более красивое исключение, как я показал выше.
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...