是否可以从JavaScript中的嵌套处理程序方法中访问类方法?

时间:2019-06-06 12:09:26

标签: javascript ajax xmlhttprequest

我想使用XML将XMLHttpRequest发送到服务器。在处理程序函数中,我需要调用周围类的方法。有没有办法实现这一目标?

我知道JavaScript中this的用法有些棘手。因此,我尝试了使用thisbind(this)的所有排列,但没有成功。

class ServerRequest
{
    askServer(url)
    {
        var request = new XMLHttpRequest();
        request.onreadystatechange = function () {
            if (this.readyState == 4 && this.status == 200) {
                // Got the response
                this.foo().bind(this); // How to access foo-method??
            }
        }
        request.open('GET', url);
        request.send();
    }

    foo()
    {
        // Do something here
    }
}

我的目标只是实现此foo方法,但是Firefox控制台向我显示了消息“ TypeError:this.foo不是函数”。

1 个答案:

答案 0 :(得分:1)

您可以通过两种方式处理它。

使用箭头功能

askServer(url)
{
    var request = new XMLHttpRequest();
    request.onreadystatechange = () => {
        if (request.readyState == 4 && request.status == 200) {
            // Got the response
            this.foo(); // How to access foo-method??
        }
    }
    request.open('GET', url);
    request.send();
}

foo()
{
    // Do something here
}

如您所见,由于箭头函数作用域的绑定方式不同,我现在按变量而不是this引用请求对象。 您可以在这里看到如何引用请求: https://developer.mozilla.org/en-US/docs/Web/API/XMLHttpRequest/onreadystatechange#Example

将上限参考保存在变量中

askServer(url)
{
    var request = new XMLHttpRequest();
    var self = this;
    request.onreadystatechange = function() {
        if (this.readyState == 4 && this.status == 200) {
            // Got the response
            self.foo(); // How to access foo-method??
        }
    }
    request.open('GET', url);
    request.send();
}

foo()
{
    // Do something here
}