Tôi có một lớp đơn giản với một phương thức exec(arg1,..,argn)
và tôi muốn có một số phương thức bí danh gọi exec
với các giá trị đối số được xác định trước (ví dụ: exec_sync = exec.bind(this, true)
).Cách thích hợp để tự động thêm hàm vào các lớp ES6
Sau đây hiện các trick:
class Executor {
constructor() {
this.exec_sync = this.exec.bind(this, true);
}
exec(sync, cmd, args/* ... */) {
// impl
}
}
Nhưng Tôi không biết nếu điều này là một ý tưởng tốt, hoặc nếu đây là thành ngữ để ES6.
UDATE:
Trong một ví dụ thực tế cuộc sống tôi có hai vòng lồng nhau với lần lượt 3 và 4 vòng, được sử dụng để tự động thêm một số tổng cộng 12 alias phương thức cho lớp. Nó sẽ là một nhiệm vụ rườm rà để xác định rõ ràng các phương thức bí danh khi bạn thực sự có thể tận dụng lợi thế của JS là một ngôn ngữ lập trình dựa trên nguyên mẫu.
UPDATE 2 - VÍ DỤ:
Giả sử chúng ta có có một khách hàng HTTP đơn giản với một phương pháp request(method, body)
và chúng tôi muốn cung cấp phương pháp bí danh cho GET
, PUT
, vv Nó sẽ trông giống như sau:
class HTTP {
constructor() {
['GET', 'PUT', 'POST', 'DEL'].forEach((method) => {
this[method] = this.request.bind(this, method);
}, this);
}
request(method, body) {
// execute the HTTP request
}
}
Tại sao không tạo nhiều hàm một cách rõ ràng? 'exec_sync (... args) {return this.exec (true, ... args); } ' – zerkms
@zerkms Tôi nghĩ rằng sẽ rõ ràng hơn những gì lớp học làm. Tôi chỉ quan tâm đến khả năng làm điều gì đó như thế. –
Các lớp ES6 chỉ là cú pháp. Không có gì thay đổi về việc thêm thuộc tính vào một đối tượng trong thời gian chạy. –