2012-01-30 41 views
2

可能重複的外部對象:
Why doesn't this closure have access to the 'this' keyword? - jQuery

function class1() { 
    this.url = 'http://en.wikiquote.org/w/api.php?action=query&format=json&prop=revisions&titles=Albert_Einstein&rvprop=content&callback=?'; 

    this.f = function() { 
     $.getJSON(this.url, function() { 
      console.log(this.url); 
     }); 
    } 
}; 

var obj = new class1(); 
obj.f(); 

而不是打印的url,obj.f()打印 「不確定」 到控制檯。爲什麼會發生這種情況,我能做些什麼來防止這種行爲?

回答

4

在你的ajax回調中,this將是jqXhr對象,而不是你當前的對象。你會想你的Ajax調用之前保存的this的價值,並引用,在你的回調

this.f = function() { 
    var self = this; 
    $.getJSON(this.url, function() { 
     console.log(self.url); 
    }); 
} 
2

如何使用var聲明節省url變量作爲地方:

function class1() { 
    var url = 'http://en.wikiquote.org/w/api.php?action=query&format=json&prop=revisions&titles=Albert_Einstein&rvprop=content&callback=?'; 

    this.f = function() { 
     $.getJSON(url, function() { 
      console.log(url); 
     }); 
    } 
}; 

這使得url變量是私有的;請注意,如果您嘗試訪問class1函數之外的url變量。

+0

但現在'url'是私人的 – 2012-01-30 17:57:10

+0

沒錯,我正在更新我的答案,使其更像您的答案,但那會是您的......所以這仍然是一個選項。 – Jasper 2012-01-30 17:59:17

+2

夠公平的。你可能會考慮添加一個編輯,如果OP不介意url不再公開,那麼這將會起作用。 – 2012-01-30 18:00:54