【发布时间】:2020-05-13 14:40:37
【问题描述】:
我最近遇到了将类成员访问到匿名函数的经典问题。
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