最近,我面临着将类成员访问到一个匿名函数中的经典问题。
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())
}