Javascript 什么是指向课堂的方法;这";从类ajaxSuccess事件侦听器方法?

Javascript 什么是指向课堂的方法;这";从类ajaxSuccess事件侦听器方法?,javascript,ajax,events,this,Javascript,Ajax,Events,This,我在我的应用程序中找到了一个快速解决方案,可以在任何更改时刷新内容-ajaxSuccess(),但我不知道如何将“this”绑定到事件。目标 bind()方法对于普通的eventListener工作得很好,但是对于ajaxSuccess它不起作用,这个问题让我保持了两天的清醒 class DataManager { constructor() { this.data = []; this.ajaxSuccessListener().bind(this);

我在我的应用程序中找到了一个快速解决方案,可以在任何更改时刷新内容-ajaxSuccess(),但我不知道如何将“this”绑定到事件。目标

bind()方法对于普通的eventListener工作得很好,但是对于ajaxSuccess它不起作用,这个问题让我保持了两天的清醒

class DataManager {

    constructor() {
        this.data = [];
        this.ajaxSuccessListener().bind(this); // not working as it should;
    }

    ajaxSuccessListener() {
        $(document).ajaxSuccess(function (event, request, settings) {
            if (settings.type !== "GET") {
                this.refresh();
            }
        })
    }

    refresh() {
        // refreshes the content
    }
}

我希望在发出http请求时运行class refresh()方法,该请求不是“GET”。如果ajaxSuccess()本身有问题,可能还有另一个优雅的解决方案吗?

因为您使用的是JavaScript类,所以可以通过arrow函数使用隐式绑定:

class DataManager {

    constructor() {
        this.data = [];
    }

    // ajaxSuccessListener() {
    // () => {} implicitly binds to "this"
    ajaxSuccessListener = () => {
        $(document).ajaxSuccess(function (event, request, settings) {
            if (settings.type !== "GET") {
                // "this" now refers to the instance of "DataManager"
                this.refresh();
            }
        })
    }

    refresh() {
        // refreshes the content
    }
}

注意:我没有尝试运行这些代码,只是指出了箭头函数如何满足您的特定要求。正如其他人提到的,我没有看到在您的代码中如何调用
ajaxSuccessListener()

您在这里调用函数
this.ajaxSuccessListener().bind(this)
,但是
ajaxSuccessListener
返回任何内容,因此它返回
未定义的
,你试图绑定
未定义的
,但这不起作用。
ajaxSuccessListener
看起来根本不是一个监听器(告诉我们你是如何称呼它的!)?您需要
.bind()
的侦听器是传递给
ajaxSuccess(…)
函数。您可以通过删除bind并在
ajaxSuccessListener
中保存
this
来解决问题,然后调用
ajaxSuccess
类似
const that=this
;为什么不传递回调?构造函数(){this.data=[];this.ajaxSuccessListener(this.refresh);//不需要绑定}ajaxSuccessListener(cb){$(document.ajaxSuccess(函数(事件、请求、设置){if(settings.type!=“GET”){cb();}谢谢,这将是最优雅的解决方案!只要文档中的ajax请求成功,就会调用P.S.ajaxSuccess