Tôi có một lớp JavaScript mà trông như thế này:Phạm vi "này" trong JavaScript
function SomeFunction()
{
this.doSomething(function()
{
this.doSomethingElse();
});
this.doSomethingElse = function()
{
}
}
Mã này ném một lỗi vì phạm vi "này" bên trong hàm đó được thông qua vào doSomething() là khác với phạm vi của "điều này" bên ngoài hàm đó.
Tôi hiểu tại sao điều này xảy ra, nhưng cách tốt nhất để giải quyết vấn đề này là gì? Đây là những gì tôi sẽ làm:
function SomeFunction()
{
var thisObject = this;
this.doSomething(function()
{
thisObject.doSomethingElse();
});
this.doSomethingElse = function()
{
}
}
Điều đó hoạt động tốt, nhưng nó chỉ cảm thấy như một hack. Chỉ cần tự hỏi nếu ai đó có một cách tốt hơn.
@Jon Kruger Đó cũng là những gì tôi làm. Tôi nghĩ điều đó khá bình thường. Bạn có thể thay đổi 'this' bằng' call' và 'apply', nhưng điều đó không phải lúc nào cũng phù hợp với những gì bạn đang làm tốt. Một tùy chọn khác là truyền 'this' như một tham số, nhưng điều đó có vẻ giống như một hack. –
@Jonathon Ý của bạn là gì "Bạn có thể thay đổi điều này bằng cuộc gọi và áp dụng"? –
@Jon Kruger Xem điều này, hãy xem bài viết của họ về 'cuộc gọi': https://developer.mozilla.org/En/Core_JavaScript_1.5_Reference/Objects/Function/Apply –