Javascript 将类成员对象访问到匿名函数中的最干净方法
我最近遇到了将类成员访问到匿名函数的经典问题Javascript 将类成员对象访问到匿名函数中的最干净方法,javascript,ecmascript-6,this,anonymous-function,Javascript,Ecmascript 6,This,Anonymous Function,我最近遇到了将类成员访问到匿名函数的经典问题 class A { constructor(a) { this.a = a; } printA() { console.log(this.a); } useAnonymousFunction() { setTimeout(function(){ this.printA(); }) } } instance =
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的标准吗?使用使用匿名函数的元素是真正丑陋的部分吗
提前感谢您的洞察力 您正在寻找的优雅解决方案是使用箭头功能:
useAnonymousFunction() {
setTimeout(() => this.printA())
}