2011-04-11 38 views
1

這大概是有經驗的網頁開發者一個簡單的問題... (我又開始了JavaScript的話)我寫了這個類:結果表達式[未定義]的「this.myMethod」不是一個函數

var FeedParser = function(url){ 
    this._url = url; 
} 
FeedParser.prototype.myMethod = function(doc){ 
    var elem = doc.getElementById('something'); 
    //do something... 
} 
FeedParser.prototype.parse = function(){ 
    var xmlRequest = new XMLHttpRequest(); 
    xmlRequest.overrideMimeType("text/xml"); 
    xmlRequest.open("GET", this._url, true); 
    xmlRequest.onreadystatechange = function() { 
     if (xmlRequest.readyState == 4) { 
      console.log("readyState"); 
      this.myMethod(xmlRequest.responseXML); //ERROR HERE! 
     } 
    }; 
    xmlRequest.send(null); 
} 

但是當我做

var parser = new FeedParser("http://..."); 
parser.parse(); 

我得到

Result of expression 'this.myMethod' [undefined] is not a function. 

我做錯了嗎?我GOOGLE了它,但我找不到與我的案例有關的任何東西

回答

3

你有一個範圍問題。您的readystatechange函數中的this函數不是您的FeedParser對象。要獲得參考,請嘗試:

var self = this; 
xmlRequest.onreadystatechange = function(){ 
    ... 
    self.myMethod(...); 
}; 
+0

Or parser.myMethod(); .. – Chris 2011-04-11 09:19:55

+0

@Chris - NO !!!!!!!!!!否否否否否!!!!! (我可以多說幾次嗎?)'parser'是FeedParser的一個實例。不要在類函數中使用實例變量名稱。 – 2011-04-11 09:21:13

+0

@Chris:只有當你只有'class'的一個實例,並且你總是必須分配一個實例給一個名爲'parser'的變量時,這纔會起作用......不是很方便。 – 2011-04-11 09:21:46

相關問題