2011-04-11 41 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

相关问题