Tôi không chắc về cách tiếp cận tốt nhất để xử lý phạm vi "cái này" trong TypeScript.
Đây là một ví dụ về một mẫu phổ biến trong mã mà tôi đang chuyển đổi sang TypeScript:
class DemonstrateScopingProblems {
private status = "blah";
public run() {
alert(this.status);
}
}
var thisTest = new DemonstrateScopingProblems();
// works as expected, displays "blah":
thisTest.run();
// doesn't work; this is scoped to be the document so this.status is undefined:
$(document).ready(thisTest.run);
Bây giờ, tôi có thể thay đổi cuộc gọi thành ...
$(document).ready(thisTest.run.bind(thisTest));
... cái nào hoạt động. Nhưng nó hơi kinh khủng. Nó có nghĩa là tất cả mã đều có thể biên dịch và hoạt động tốt trong một số trường hợp, nhưng nếu chúng ta quên ràng buộc phạm vi, nó sẽ bị hỏng.
Tôi muốn một cách để thực hiện nó trong lớp, để khi sử dụng lớp, chúng ta không cần phải lo lắng về phạm vi "cái này" là gì.
Bất kỳ đề xuất?
Cập nhật
Một cách tiếp cận khác hiệu quả là sử dụng mũi tên béo:
class DemonstrateScopingProblems {
private status = "blah";
public run = () => {
alert(this.status);
}
}
Đó có phải là một cách tiếp cận hợp lệ?