2009-10-30 50 views
9

我經常在AS3類的構造函數中看到init(),有時甚至是構造函數中的唯一代碼。如果你可以簡單地使用構造函數本身來初始化一個類,爲什麼這樣做會很有用呢?actionscript 3 init()

package 
{ 

    import flash.display.Sprite; 

    public class Example extends Sprite 
    { 

     public function Example() 
     { 
      init();     
     } 

     public function init ():void 
     { 

     //initialize here 

     } 

    } 

} 

回答

16

在ActionScript 3中,構造函數代碼總是被解釋而不是編譯。我相信將代碼移入init()函數可能會允許編譯和優化它。

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

+1

事實上,如果您有任何重要的代碼將其放入由構造函數調用的函數中。 – Allan 2009-10-31 01:29:45

+0

我還沒有意識到這一點,有趣的消息要知道,謝謝! – JStriedl 2009-10-31 19:18:33

6

我這樣做是讓我可以重新初始化類,而無需創建它的一個新實例的原因。 init()方法的工作原理基本上是一個「重置」按鈕,然後,如果您編寫了正確的代碼,則允許您將該類返回到其初始狀態,例如,允許任何已設置爲保持設置的變量。

當然,取決於你如何編碼它。

3

另一個原因可能是您需要對舞臺或父容器的引用,並且懶得設置一個ADDED_TO_STAGE偵聽器。然後,您將首先實例化類,然後將其添加到容器中,然後在顯示列表上調用init()

2

新加入AS3的程序員經常遇到引用舞臺的問題(衆所周知的「不存在」情況)。

這樣做...:

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 
} 

...它很容易固定。

或者有時您在構造函數中初始化XML加載器,然後在加載完成時調用初始化函數。