2009-10-30 17 views
9

Ho visto spesso un init() all'interno del costruttore di classi AS3, a volte anche l'unico codice nel costruttore. Perché sarebbe utile farlo, se si potesse semplicemente usare la funzione di costruzione stessa per inizializzare una classe?actionscript 3 init()

package 
{ 

    import flash.display.Sprite; 

    public class Example extends Sprite 
    { 

     public function Example() 
     { 
      init();     
     } 

     public function init ():void 
     { 

     //initialize here 

     } 

    } 

} 

risposta

16

In ActionScript 3, il codice costruttore viene sempre interpretato anziché compilato. Credo che spostare il codice in una funzione init() possa consentirne la compilazione e l'ottimizzazione.

http://blog.pixelbreaker.com/flash/as30-jit-vs-interpreted/

+1

infatti, se si dispone di un codice significativo, inserirlo in una funzione che viene chiamata dal costruttore. – Allan

+0

Non ne ero a conoscenza, interessante curiosità da sapere, grazie! – JStriedl

6

Il motivo che ho fatto è così che io possa ri-inizializzare una classe senza creare una nuova istanza di esso. Il metodo init() funziona fondamentalmente come un pulsante di "reset", quindi, se lo si codifica correttamente, consente di riportare la classe allo stato iniziale mentre, ad esempio, consente a qualsiasi variabile che è stata impostata di rimanere impostata.

A seconda di come lo si codifica, ovviamente.

3

Un altro motivo può essere che è necessario un riferimento allo stage o a un contenitore padre ed è troppo pigro per impostare un listener ADDED_TO_STAGE. Quindi devi prima istanziare la classe, aggiungerla al contenitore e quindi chiamare init() una volta che è sulla lista di visualizzazione.

2

I programmatori nuovi nell'AS3 spesso hanno problemi a fare riferimento allo stage (la ben nota situazione "non c'è").

Facendo ...:

public function ClassName() 
{ 
    super(); 
    addEventListener(Event.ADDED_TO_STAGE, init, false, 0, true); 
} 

private function init(event : Event) : void 
{ 
    removeEventListener(Event.ADDED_TO_STAGE, init); 
    // Reference stage.stageWidth; 
    // Call init after some sort of load completion initialized in the constructor 
} 

... è facilmente risolto.

Oppure a volte si inizializza un caricatore XML nel costruttore e quindi si chiama la funzione di inizializzazione al completamento del caricamento.

Problemi correlati