首页 > 解决方案 > 如何在该类方法的匿名函数之一中调用类方法?

问题描述

我有以下内容:

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”范围。

标签: javascriptclass

解决方案


传统解决方案:存储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));
}

推荐阅读