![]() |
|
||||||||||
|
|||||||
|
|
« Предыдущая тема | Следующая тема » |
| Опции темы | Опции просмотра |
|
![]() |
![]() |
|
|||||
|
Регистрация: May 2010
Адрес: Ногинск
Сообщений: 56
|
Столкнулся с загадкой, связанной с наследованием в AS3. В базовом классе объявлена защищенная статическая переменная:
public dynamic class View extends Sprite { ... public static const LANG_RU:String = 'ru'; public static const LANG_EN:String = 'en'; protected static var _lang:String; static public function get lang():String { return _lang; } static public function set lang(value:String):void { _lang = value; } ... } Пробую обратиться к ней в дочернем классе (наследуется непосредственно от View) без уточнения объекта: Значение выводится. Но при этом если обратиться к ней как this._lang или super._lang - получаем undefined. В связи с этим возникает вопрос: как наследуются статические переменные? |
|
|||||
|
Регистрация: Dec 2010
Адрес: Ярославль
Сообщений: 1,255
|
У статических переменных нет this. Они принадлежат классу, а не экземпляру.
|
|
|||||
|
Цитата:
__________________
Gamedev != Gaming (http://twitter.com/#!/GenzoDev). Don't forget to [+] if it works. |
|
|||||
|
Регистрация: May 2010
Адрес: Ногинск
Сообщений: 56
|
Цитата:
А есть вариант для обращения к статическим переменным класса вроде self в PHP? |
|
|||||
|
статические переменные не наследуются. На в AS3 ни в C++ ни в одном из известных мне языков, кроме php, но эту ересь я стараюсь обходить за километр.
Добавлено через 43 секунды Цитата:
__________________
:) |
|
|||||
|
Цитата:
Можно конечно извратиться, но все равно придется указывать название класса, да и не нужно :
__________________
Gamedev != Gaming (http://twitter.com/#!/GenzoDev). Don't forget to [+] if it works. |
|
|||||
|
Можно ещё сильнее извратится. Можно взять от себя describeType и проехаться по всей цепочке наследования и получая ссылки на сами классы предки через getDefenitionByName дёргать у них эту статику. Т.е. теоретически можно сделать что-то типа прототипного наследования, и искать свойство в цепочке предков. Но я не вижу смысла так делать.
__________________
:) |
|
|||||
class Users { private static var numInstances:Number = 0; function Users() { numInstances++; } static function get instances():Number { return numInstances; } } class PowerUsers extends Users{ function PowerUsers() { instances++; // unqualified reference to static property Users.instances is legal } } trace(PowerUsers.instances); // error, cannot access static property using PowerUsers class Цитата:
__________________
Gamedev != Gaming (http://twitter.com/#!/GenzoDev). Don't forget to [+] if it works. |
|
|||||
|
Регистрация: May 2010
Адрес: Ногинск
Сообщений: 56
|
Ясно, спасибо за ответ. Наверно, наиболее оптимально обращаться без квалификатора либо с именем родительского класса.
|
![]() |
![]() |
Часовой пояс GMT +4, время: 08:47. |
|
|
« Предыдущая тема | Следующая тема » |
| Опции темы | |
| Опции просмотра | |
|
|