将 class 成员对象访问到匿名函数中的最简洁方法

Cleanest way to access class member objects into an anonymous function

我最近遇到了将 class 成员访问匿名函数的 class 逻辑问题。

class A {
    constructor(a) {
        this.a = a;
    }

    printA() {
        console.log(this.a);
    }

    useAnonymousFunction() {
        setTimeout(function(){
            this.printA();
        })
    }
}

instance = new A(42);

instance.useAnonymousFunction();//TypeError: this.printA is not a function

我找到的解决方案是使用 class 将 "this" 存储到另一个变量中的典型技巧。

useAnonymousFunction() {
    //that or self
    let that = this;
    setTimeout(function(){
        that.printA();
    })
}

我在示例中使用了 setTimeout 以提高可读性,但它可能用于设置事件或 AJAX 请求。

这个解决方案看起来很丑陋。我试图寻找更优雅的东西,但找不到任何东西。有一些基于绑定的解决方案,但似乎它们并不总是有效(而且它们更不优雅)。

这个解决方案真的是 EC6 中的标准吗?使用使用匿名函数的元素是真正丑陋的部分吗?

提前感谢您的见解!

您正在寻找的优雅解决方案是使用箭头函数:

useAnonymousFunction() {
    setTimeout(() => this.printA())
}