如何访问匿名函数内部的类方法



我在JS类中有一个方法,在Promise的回调中,我希望它调用另一个类方法。

class MyClass {
myClassMethod(arg1) {
// this method did get called
}

aSecondClassMethod() {
//...
}
methodWithPromise() {
var myClassMethod = this.myClassMethod;
let aPromise = methodReturnPromise(); 
aPromise.then(function (value) {
myClassMethod(value);
}
}

所以我创建了一个名为myClassMethod的变量,并将其设置为this.myClassMethod。当我调试代码时,myClassMethod确实在Promise的then回调中被调用。

我遇到的问题是当我的myClassMethod()调用其他类方法(),即

myClassMethod(args) {
aSecondClassMethod();
}

我得到错误说aSecondClassMethod是未定义的。我试着

myClassMethod(args) {
this.aSecondClassMethod();
}

但是它给了我同样的错误。我想我可以通过为myClassMethod()调用的每个类方法声明一个var来解决这个问题。

var aSecondClassMethod= this.aSecondClassMethod;

但是这看起来很麻烦去维护代码。

我想知道是否有更好的方法。

使用箭头函数,因为它捕获了封闭上下文的this值。

aPromise.then(value => this.myClassMethod(value));

我还建议使用新的() => {}函数符号来定义包含承诺的类方法。如果没有这个(或者一个老派的绑定),this仍然是undefined

我通常的风格:

class MyClass {
myClassMethod = (value) => {
//something..
};
methodWithPromise = () => {
somePromise
.then((res) => {
this.myClassMethod(res);
})
.catch((err) => {
console.error(err);
return;
});
};
}

最新更新