2012-02-05 60 views
5

Tôi có một vấn đề nhỏ trong chương trình đối tượng trong javascript'này' tài liệu tham khảo trong JavaScript

Có một "lớp" Task, nó có một số phương pháp, một phương pháp có chứa một không đồng bộ gửi một yêu cầu với sự giúp đỡ của JQuery ($.ajax). Sau khi yêu cầu thành công, cần thực hiện một phương thức cụ thể (ví dụ: successFunction) của lớp Task.

Vấn đề là, sau khi truy vấn trong cơ thể của successFunction nó không thể tham khảo các lớp học sử dụng từ khóa this, vì bối cảnh đã thay đổi, và điều này có chứa một tham chiếu đến jquery-object mà thực hiện một ajax-yêu cầu.

Biến thể nào đề cập đến đối tượng Tác vụ hiện tại bên trong một hàm không được tạo ra trực tiếp nhưng bên ngoài tồn tại? (Ví dụ: bởi sự kiện hoặc ajax)

Trả lời

9

Thông thường bên trong sự kiện AJAX, chẳng hạn như gọi lại thành công, this là đối tượng được trả về bằng cuộc gọi $.ajax. Bạn có thể sử dụng tham số context để thay đổi bối cảnh trong callback thành công:

$.ajax({ 
    url: '/foo', 
    context: this, // <!-- change the context of the success callback 
    success: function(result) { 
     // 'this' here will refer to whatever it refered outside 
    } 
}); 

Bạn cũng có thể vượt qua đối tượng phức tạp:

$.ajax({ 
    url: '/foo', 
    context: { element: this, foo: 'bar' }, 
    success: function(result) { 
     // you can use 'this.element' and 'this.foo' here 
    } 
}); 
+0

Cảm ơn, đó chính xác là những gì tôi cần. – JN0iZzze

7

Bạn có thể định nghĩa một biến mà giữ tham chiếu đến đối tượng:

function Task() { 
    var that = this; 
    this.call = function() { 
    $.ajax({ 
     url: '/foo', 
     success: function(result) { 
     console.log(that); // <-- you cann access this object via that 
     } 
    }); 
    }; 
} 
+0

+1, cho 'đó'. –

+0

+1, phong cách 'Crockford' đó. – dwerner

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