Переменные, объявленные в конструкторе, конфликтующие со свойствами класса - PullRequest
1 голос
/ 23 мая 2011

Я создаю кнопку в ActionScript, расширяя flash.display.SimpleButton

Однако кнопка работает не так, как ожидалось, когда я объявляю некоторые переменные в конструкторе, которые также существуют как свойства в классе SimpleButton. Они кажутся конфликтующими ..

Почему это? Разве локально объявленные переменные не должны сосуществовать с одноименными свойствами класса?

Фрагмент ниже может лучше проиллюстрировать проблему:

public class MyButton extends SimpleButton{

    public function MyButton(/*..*/){

        var upState:ButtonDisplayState = new ButtonDisplayState(/*..*/));
        var downState:ButtonDisplayState = new ButtonDisplayState(/*..*/);      
        var overState:ButtonDisplayState = new ButtonDisplayState(/*..*/);      
        var hitTestState:ButtonDisplayState = new ButtonDisplayState(/*..*/);       

        super(upState, overState, downState, hitTestState);

   }

}

Документы по API здесь (смотрите upState, например): http://livedocs.adobe.com/flash/9.0/ActionScriptLangRefV3/flash/display/SimpleButton.html#upState

Спасибо

Aodh.

1 Ответ

1 голос
/ 23 мая 2011

Вы не можете переопределить уже существующие переменные, локальные или нет. Единственное место, где вы можете сделать что-то подобное, это параметры метода, где вы можете иметь те же имена параметров, что и локальные переменные / переменные класса.

Почему бы вам просто не передать эти состояния конструктору напрямую, например:

super(new ButtonDisplayState(/*..*/)), new ButtonDisplayState(/*..*/)), new ButtonDisplayState(/*..*/)), new ButtonDisplayState(/*..*/)));

или, альтернативно, просто установите их сразу после вызова super();, например:

upState = new ButtonDisplayState(/*..*/));
downState = new ButtonDisplayState(/*..*/);      
overState = new ButtonDisplayState(/*..*/);      
hitTestState = new ButtonDisplayState(/*..*/);  
...