2009-10-30 28 views
9

A menudo he visto un init() dentro del constructor de clases AS3, a veces incluso siendo el único código en el constructor. ¿Por qué sería útil hacer esto si simplemente pudieras usar la función del constructor para inicializar una clase?actionscript 3 init()

package 
{ 

    import flash.display.Sprite; 

    public class Example extends Sprite 
    { 

     public function Example() 
     { 
      init();     
     } 

     public function init ():void 
     { 

     //initialize here 

     } 

    } 

} 

Respuesta

16

En ActionScript 3, el código del constructor siempre se interpreta en lugar de compilarse. Creo que mover el código a una función init() puede permitir que se compile y optimice.

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

+1

de hecho, si tiene un código significativo, colóquelo en una función que el constructor llama. – Allan

+0

No estaba al tanto de eso, un bocado interesante para saber, ¡gracias! – JStriedl

6

La razón por la que he hecho es para que pueda volver a inicializar una clase sin necesidad de crear una nueva instancia de la misma. El método init() funciona básicamente como un botón "restablecer" y, si lo codifica correctamente, le permite devolver la clase a su estado inicial, mientras que, por ejemplo, permite que las variables que se han establecido permanezcan configuradas.

Dependiendo de cómo lo codifique, por supuesto.

3

Otra razón puede ser que necesita una referencia al escenario o un contenedor primario y es demasiado vago para configurar un escucha ADDED_TO_STAGE. Luego habría creado una instancia de la clase primero, agréguela al contenedor y luego llame al init() una vez que esté en la lista desplegable.

2

Los programadores nuevos en AS3 a menudo tienen problemas para hacer referencia al escenario (la conocida situación 'no está allí').

Haciendo ...:

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 
} 

... se puede arreglar fácilmente.

O a veces inicializa un cargador XML en el constructor y luego llama a la función de inicialización al finalizar la carga.

Cuestiones relacionadas