Javascript 什么是指向课堂的方法;这";从类ajaxSuccess事件侦听器方法?
我在我的应用程序中找到了一个快速解决方案,可以在任何更改时刷新内容-ajaxSuccess(),但我不知道如何将“this”绑定到事件。目标 bind()方法对于普通的eventListener工作得很好,但是对于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);
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