2010-08-24 28 views
26

Tôi cóActionScript-3 không thể có nhiều hàm tạo?

public function Shard() { 
    } 

    public function Shard(x:Number, y:Number, vx:Number, vy:Number, rotation:Number, spin:Number) 
    { 
     ... 
    } 

Và tôi đã nhận trên constructor thứ hai:

Nhiều định nghĩa constructor được tìm thấy. Constructor có thể không được xác định trong mã .

Vì vậy, ActionScript-3 không thể có nhiều hàm tạo?

+1

Tại sao bạn muốn nhiều nhà thầu? Có phải một số tham số tùy chọn không? – timrwood

Trả lời

33

Không bạn không thể có nhiều contructor không phải chức năng tương tự với chữ ký khác nhau, nhưng bạn có thể sử dụng đối số mặc định:

public function Shard(x:Number=NaN, y:Number=NaN) { 
    //... 
} 

sau đó bạn có thể gọi new Shard() hoặc new Shard(100) hoặc new Shard(100, 200)

hoặc bạn có thể cũng sử dụng đối số biến:

public function Shard(...args){ 
if (args.length==0) { 
    //... 
} else { 
    //... 
    var firstArg:Object=args[0]; 
    //... 
} 
} 
12

Thậm chí còn rộng hơn thế. AS3 không có hỗ trợ nào cả cho function overloading.

Bạn có thể mô phỏng sự xuất hiện của nhiều hàm tạo với tham số mặc định và/hoặc tự động gửi các tham số đến các phương thức init khác nhau. Ngoài ra, các nhà máy đối tượng tùy chỉnh hoặc phương pháp tạo tĩnh có thể hữu ích.

+2

+1. Tôi đã sử dụng các phương thức tĩnh để khởi tạo và trả về một phiên bản mới (giống như các nhà máy). Nói chung, các phương thức này được định nghĩa trong cùng một lớp và chỉ có nghĩa là đơn giản hóa giao diện cho mã gọi. Đó là cách giải quyết đơn giản và hiệu quả trong một số trường hợp (mặc dù nếu bạn muốn có các "hàm tạo" khác nhau này, bạn phải làm tên mangling vì trình biên dịch không làm điều đó cho bạn) –

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