#actionscript-3
#actionscript-3
Вопрос:
Сформулированный по-другому, этот вопрос мог бы звучать так: «Каков порядок объявлений и определений переменных во время компиляции?»
На данный момент я не могу вспомнить конкретные примеры, но я знаю, что столкнулся с проблемами при инициализации значений const и static в моих определениях классов из-за того, что объявление этих значений происходит не по порядку.
Я знаю, что могу создавать экземпляры объектов при объявлении статических постоянных членов, например:
public class ConstsWithNewObjects {
public static const DEFINED_NOW_2:Object = {something:"Defined!"};
public static const DEFINED_NOW_3:Object = new CustomObject("Defined!");
}
Но, если я обращаюсь к одному из этих членов из другого статического или постоянного значения, я представляю, что возникают условия гонки, например:
public class ConstsWithOtherConsts {
public static const DEFINED_NOW_1:Object = DEFINED_NOW_3; // Does this exist, yet?
}
Ответ №1:
Герой ActoinScript Джек Данстан очень подробно осветил эту тему в своем блоге: Загрузка класса, часть 2.
Независимо от выводов Джека; Я бы рекомендовал, для здравомыслия ваших читателей; чтобы ваш код статического инициализатора был максимально чистым и простым — не забывайте, что статические поля могут вызывать статические методы; вы также можете использовать метод инициализатора статического класса.