表达式'this.myMethod'[undefined]的结果不是函数

时间:2011-04-11 09:12:45

标签: javascript xmlhttprequest

对于经验丰富的网络开发者来说,这可能是一个简单的问题...... (我再次启动了javascript)我写了这个类:

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搜索了,但我找不到任何与我的案例有关的内容

1 个答案:

答案 0 :(得分:3)

您有范围问题。 this功能中的readystatechange不是您的FeedParser对象。要获得对它的引用,请尝试:

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