2011-01-07 7 views
1

eine .as Datei betrachten, die wie folgt aussieht:ActionScript: In welcher Reihenfolge werden interne/statische/Instanzvariablen initialisiert?

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():* { ... } 

Was ist die definierte Reihenfolge für a..f jede der Variablen/Funktionen zu initialisieren?

(Ich weiß, ich Experimente tun kann, um herauszufinden, ... Aber ich bin auf der Suche für die tatsächliche angegebene Definition)

+0

Können Sie Ihre Frage ein wenig klarer erklären, ich dachte, ich hätte eine Antwort für Sie, aber dann war ich nicht zeigen, was genau Sie fragen. – Taurayi

+0

Ich suche nach der dokumentierten Initialisierungsreihenfolge der Variablen "a" bis "f" im obigen Code. Hilft das? Können Sie genauer sein mit dem, was Sie nicht verstehen? –

Antwort

2

Nun, der schwierige Teil ist, statische Initialisierung.

Alle statischen Methoden und Variablen werden vor jeder Ausführung deklariert. Statische Methoden werden "sofort" initialisiert, in dem Sinne, dass Sie sie jederzeit aufrufen können. Dann werden statische Variablen in der Reihenfolge ihres Auftretens initialisiert. Dann werden alle statischen Initialisierung wird in der Reihenfolge der appearence ausgeführt:

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 {}  
    } 
} 

Aber im Allgemeinen, mein Rat ist, sich nicht darauf verlassen, es sei denn, Sie wirklich zu haben.

Verwandte Themen