2010-11-09 62 views
1
function Request(params) 
{ 
    // Stuff stuff stuff 

    // And then 

    $.ajax(
    { 
     type: 'GET', 
     url: 'someurl', 
     success: this.done 
    }); 
} 

Request.prototype.done = function() 
{ 
    // "this" in this context will not refer to the Request instance. 
    // How to reach it? 
} 

回答

4

你可以捕捉 「這種」 先:

function Request(params) 
{ 
    // Stuff stuff stuff 

    // And then 

    var $this = this; 

    $.ajax(
    { 
     type: 'GET', 
     url: 'someurl', 
     success: function() { $this.done(); } 
    }); 
} 
+0

爲了這個特定的目的,一個「context」參數可以被添加到ajax請求中,並引用這個參數。但除此之外,您的解決方案更一般化,因此我將其設置爲正確的答案。 – quano 2010-11-17 09:54:00

0

this並不是一樣的東西!

-1

嘗試以下操作:

function Request(params) 
{ 
    var that = this; 

....

Request.prototype.done = function() 
{ 
    that... 
+0

「that」對於請求函數是本地的。 – quano 2010-11-09 10:08:35

+0

確實,「那個」在done() – 2010-11-09 10:09:41

+0

是沒有定義的,我在同一個「閉包」內使用「那個」技巧時不會失去對此的引用;嘗試過它也不適用於原型。它會工作,如果完成不會使用原型定義:)。 – rbhro 2010-11-09 10:17:39

3

顯然,你可以在 「背景」 參數添加到ajax請求,如下所示:

$.ajax(
{ 
    type: 'GET', 
    url: 'someurl', 
    success: this.done, 
    context: this 
});