如何在类的方法的匿名函数之一中调用类的方法?

时间:2019-02-09 17:55:13

标签: javascript class

我有以下内容:

class Button_Event {
    add_click() {
        this.button_jquery_object.on('click', function(e){
            this.add_loading();

            run_function_by_name(this.ajax_callback).done(function() {
                this.remove_loading();
            });
        });
    }
}

但是当我运行它时,会发生以下错误:

Uncaught TypeError: this.add_loading is not a function

...这是正确的。我试图在匿名函数中调用类的方法。我觉得我不应该这样做,但我需要这样做。该怎么办?

我相信我也在寻求以某种方式在匿名函数主体上强制执行“ this”范围。

1 个答案:

答案 0 :(得分:0)

传统解决方案:将this存储在本地变量中

add_click() {
    const self = this;
    this.button_jquery_object.on('click', function(e){
        self.add_loading();
    });
}

现代解决方案:使用箭头功能,该功能会自动从上下文中绑定this

add_click() {
    this.button_jquery_object.on('click', (e) => {
        this.add_loading();
    });
}

奇怪的解决方案:手动将this绑定到函数

add_click() {
    this.button_jquery_object.on('click', function(e){
        this.add_loading();
    }.bind(this));
}