如何访问“的父项”;这";关于JavaScript?
我在用Javascript编程面向对象时遇到了一个问题。我有以下资料:如何访问“的父项”;这";关于JavaScript?,javascript,class,oop,this,Javascript,Class,Oop,This,我在用Javascript编程面向对象时遇到了一个问题。我有以下资料: class Foo{ constructor(){...} ... a_needed_method(){...} ... a_method(){ ... jsObject.on("click",function(params){ this.a_needed_method(); }); } } 问题是,
class Foo{
constructor(){...}
...
a_needed_method(){...}
...
a_method(){
...
jsObject.on("click",function(params){
this.a_needed_method();
});
}
}
问题是,如果我在那里使用this
调用a\u needed\u方法
方法,那么this
引用的是控制onclick
事件的匿名函数。如何从这个匿名函数调用a\u needed\u method()
您可以使用箭头功能来保存词法:
jsObject.on("click", params => {
this.a_needed_method();
});
ES5
您可以使用好的旧,它=this
:
var that = this;
jsObject.on("click", function (params) {
that.a_needed_method();
});
您可以使用
bind
:
jsObject.on("click",function(params){
this.a_needed_method();
}.bind(this));
让jsObject=$(这个);
福班{
构造函数(){
}
a_所需的_方法(){
log('That works!');
}
a_方法(){
jsObject.on(“单击”,函数(参数){
这个.a_需要_方法();
}.约束(这个);
}
}
设x=newfoo();
x、 a_方法()代码>
单击任意位置
假设此
是a_方法
中的类,并且它是使用该执行上下文调用的,并且假设事件处理程序使用jQuery,您可以简单地使用它将您想要的任何内容传递给事件处理程序回调,这就是event.data
的目的
a_method(){
...
jsObject.on("click", {klass : this}, function(params){
params.data.klass.a_needed_method();
});
}
让jsObject=$(这个);
福班{
构造函数(){
}
a_所需的_方法(){
log('That works!');
}
a_方法(){
关于(“click”{klass:this},函数(params){
params.data.klass.a_需要_方法();
});
}
}
设x=newfoo();
x、 a_方法()代码>
单击构造函数中的任意位置,您可以说:
constructor(){
this.a_needed_method = this.a_needed_method.bind(this);
}
那要看情况。事件处理程序是否使用jQuery?a_方法如何调用(this
取决于执行上下文)?您需要将this
绑定到作为参数传递给on
的函数,而不是绑定到on
函数的返回值。@Titus感谢您提醒我这一点,我已经更新了两次绑定。:)你为什么认为最后一次绑定是必要的?事实上,最后一个是不推荐使用的jQuery.bind()
方法,而不是函数.prototype.bind
,将此
传递给它不会有任何用处。我认为这不能解决问题,因为在匿名函数中,这是。所需的方法仍将是未定义的
。感谢您的回复,我使用了更新版本:arrow函数,工作正常。我不知道这是否存在,因为我只是一个初学者,所以。。。你能给我解释一下什么是箭头函数以及什么时候应该使用它吗?再次感谢你!不客气!:)如果您想了解有关箭头函数的更多信息,我建议您在此处阅读我的深入回答: