2009-10-30 34 views
9

Tôi thường thấy một init() bên trong hàm tạo của các lớp AS3, đôi khi thậm chí là mã duy nhất trong hàm tạo. Tại sao nó sẽ hữu ích để làm điều này, nếu bạn chỉ đơn giản có thể sử dụng hàm constructor để khởi tạo một lớp?actionscript 3 init()

package 
{ 

    import flash.display.Sprite; 

    public class Example extends Sprite 
    { 

     public function Example() 
     { 
      init();     
     } 

     public function init ():void 
     { 

     //initialize here 

     } 

    } 

} 

Trả lời

16

Trong ActionScript 3, mã trình xây dựng luôn được diễn giải thay vì được biên dịch. Tôi tin rằng việc chuyển mã vào một hàm init() có thể cho phép nó được biên dịch và tối ưu hóa.

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

+1

thực sự, nếu bạn có bất kỳ mã quan trọng nào được đặt trong một hàm được gọi bởi hàm tạo. – Allan

+0

Tôi đã không nhận thức được điều đó, thú vị miếng ngon để biết, cảm ơn! – JStriedl

6

Lý do tôi đã làm nó là như vậy mà tôi có thể tái khởi tạo một lớp mà không cần tạo một thể hiện mới của nó. Phương thức init() hoạt động như một nút "reset" về cơ bản, nếu bạn mã hóa nó đúng, cho phép bạn trả về lớp về trạng thái ban đầu của nó trong khi, ví dụ, cho phép bất kỳ biến nào đã được thiết lập để giữ nguyên.

Tùy thuộc vào cách bạn mã hóa nó, tất nhiên.

3

Một lý do khác có thể là bạn cần tham chiếu đến vùng hiển thị hoặc vùng chứa gốc và quá lười để thiết lập trình nghe ADDED_TO_STAGE. Sau đó, bạn sẽ có thể khởi tạo lớp đầu tiên, thêm nó vào thùng chứa và sau đó gọi init() khi nó nằm trong danh sách hiển thị.

2

Người lập trình mới đến AS3 thường gặp sự cố khi tham chiếu đến giai đoạn (tình huống 'không có').

Bằng cách làm ...:

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 
} 

... nó dễ dàng cố định.

Hoặc đôi khi bạn khởi tạo trình tải XML trong hàm tạo, sau đó gọi hàm khởi tạo khi hoàn tất tải.

Các vấn đề liên quan