|
|
« Предыдущая тема | Следующая тема » |
Опции темы | Опции просмотра |
|
|
|||||
Регистрация: Feb 2008
Сообщений: 890
|
Обращение к статическим константам класса
Почему ругается на попытку обращения TestClass.STRING, но не ругается на STRING - в статической ф-ии, и не ругается на обращение TestClass.STRING при присвоении значения константе?
public class TestClass { public static const STRING:String = "MY_STRING"; public static const TEST:Boolean = TestClass.test(); public static const TEST_TWO:String = TestClass.STRING; private static function test():Boolean { //Если не закомментить эту строчку, выплюнет исключение: //Error #1009: Cannot access a property or method of a null object reference. trace(TestClass.STRING); //но здесь все ок o_O trace(STRING); return true; } } - тоже все ок.
__________________
скриптограф |
|
|||||
Регистрация: Nov 2010
Сообщений: 434
|
ну тогда уж не TestClass.STRING а this.STRING
|
|
|||||
Et cetera
Регистрация: Sep 2002
Сообщений: 30,784
|
Такой порядок инициализации.
|
|
|||||
Регистрация: Feb 2008
Сообщений: 890
|
А подробней можно, что происходит? А то я буду думать, что для статических констант сначала создаются локальные переменные, потом инициализируются статические ф-ии, используя если надо эти локальные переменные (STRING в ф-ии test()), и уж потом инициализируются сами статические константы.
В общем я не понял, почему TestClass.STRING != STRING.
__________________
скриптограф |
|
|||||
Et cetera
Регистрация: Sep 2002
Сообщений: 30,784
|
Лениво лезть в доку и декомпилы устраивать, но суть, видимо, в том, что в момент вызова test(), все переменные класса ещё не принадлежат ему (ещё не инициализировано значение TEST), но есть в области видимости, как в обычном блоке кода. Т. е. TestClass внутри test() ещё пуст, т. е. TestClass = null.
Последний раз редактировалось etc; 02.02.2011 в 20:58. |
Часовой пояс GMT +4, время: 18:14. |
|
« Предыдущая тема | Следующая тема » |
|
|