ES6 cho phép mở rộng các đối tượng đặc biệt. Vì vậy, nó có thể kế thừa từ hàm. Đối tượng như vậy có thể được gọi là một hàm, nhưng làm thế nào tôi có thể triển khai logic cho lệnh gọi như vậy?
class Smth extends Function {
constructor (x) {
// What should be done here
super();
}
}
(new Smth(256))() // to get 256 at this call?
Bất kỳ phương thức nào của lớp cũng được tham chiếu đến thể hiện của lớp thông qua this
. Nhưng khi nó được gọi là một hàm, this
tham chiếu đến window
. Làm cách nào tôi có thể lấy tham chiếu đến cá thể lớp khi nó được gọi là một hàm?
Tái bút: Câu hỏi tương tự bằng tiếng Nga.
super(x)
(tức là chuyển nó cùng với Function
)? Không chắc chắn nếu Function
thực sự có thể được gia hạn.
Error
, trong số những vấn đề khác.
Function
chỉ đơn giản là một hàm tạo hàm. Việc thực hiện hàm phải được chuyển cho hàm tạo. Nếu bạn không muốn Smth
chấp nhận một triển khai, bạn phải cung cấp nó trong phương thức khởi tạo, tức là super('function implementation here')
.
Function
tạo (thời gian chạy) rất khác với biểu thức hàm (cú pháp).