繁体   English   中英

如何在匿名 function 中访问 class 方法

[英]How to access class method inside an anonymous function

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

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

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

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

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

myClassMethod(args) {
  aSecondClassMethod();
}

我收到错误消息说aSecondClassMethod未定义。 我试过了

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

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

   var aSecondClassMethod= this.aSecondClassMethod;

但这对于继续维护代码似乎很麻烦。

我想知道是否有更好的方法来做到这一点。

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

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

我还建议使用新的() => {} function 符号来定义包含 promise 的 class 方法。如果没有它(或老式绑定) this仍然是undefined

我一贯的作风:

class MyClass {

  myClassMethod = (value) => {
    //something..
  };

  methodWithPromise = () => {
    somePromise
      .then((res) => {
        this.myClassMethod(res);
      })
      .catch((err) => {
        console.error(err);
        return;
      });
  };
}

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM