将 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())
}
我最近遇到了将 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())
}