在匿名函数中访问类成员对象的最简洁的方法[重复]。

问题描述 投票:0回答:1

最近,我面临着将类成员访问到一个匿名函数中的经典问题。

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

我找到的解决方案是使用经典的技巧,将 "this "存储到一个其他变量中。

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

在我的例子中,我使用了setTimeout来保证可读性,但它也可以用于设置一个事件或AJAX请求。

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

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

先谢谢你的见解

javascript ecmascript-6 this anonymous-function
1个回答
1
投票

你要找的优雅的解决方案是使用箭头函数。

useAnonymousFunction() {
    setTimeout(() => this.printA())
}
© www.soinside.com 2019 - 2024. All rights reserved.