ActionScript: каков определенный порядок инициализации внутренних / статических / переменных экземпляра? - PullRequest
1 голос
/ 07 января 2011

Рассмотрим файл .as, который выглядит следующим образом:

package foo {
class Foo {
    public static var a:* = getA();
    public static var b:* = getB();
    public var c:* = getC();

    public static function d():* { ... }

    public function Foo() {
        trace("initializing");
    }
}
}

// internal functions/variables
var e:* = getD();
function f():* { ... }

Каков определенный порядок инициализации каждой из переменных / функций a..f?

(я знаю, что ямогу сделать эксперименты, чтобы выяснить ... Но я ищу фактическое указанное определение)

1 Ответ

2 голосов
/ 19 мая 2011

Ну, самая сложная часть - статическая инициализация.

Все статические методы и переменные объявляются перед выполнением. Статические методы инициализируются «мгновенно» в том смысле, что вы можете вызывать их в любое время. Затем статические переменные инициализируются в порядке появления. Затем вся статическая инициализация выполняется в порядке появления:

package {
    import flash.display.Sprite;
    public class Main extends Sprite {      
        __init(c,'static');//"static initialization b" because all variables are initialized prior to static initialization
        public static var a:String = __init(b);//"variable initialization null", because b is declared, but not initialized
        public static var b:String = __init('b');//"variable initialization b" for obvious reasons
        public static var c:String = __init(b);//"variable initialization b" because b is now initialized
        public static function __init(s:String, type:String = 'variable'):String {
            trace(type, 'initialization', s);
            return s;
        }
        public function Main():void {}      
    }
}

Но, в общем, мой совет не полагается на него, если вы действительно не должны.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...