Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/412.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
如何访问“的父项”;这";关于JavaScript?_Javascript_Class_Oop_This - Fatal编程技术网

如何访问“的父项”;这";关于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(); }); } } 问题是,

我在用Javascript编程面向对象时遇到了一个问题。我有以下资料:

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函数,工作正常。我不知道这是否存在,因为我只是一个初学者,所以。。。你能给我解释一下什么是箭头函数以及什么时候应该使用它吗?再次感谢你!不客气!:)如果您想了解有关箭头函数的更多信息,我建议您在此处阅读我的深入回答: