将promise处理程序绑定到其类

时间:2016-03-06 23:01:04

标签: javascript promise this

我有一个具有单个样板函数的类,它可以处理我的承诺错误。

export class AuthError {
  constructor () {
    this.foo = "Something important!";
  }

  catch (e) {
    if (e.hasAProblem) this.foo.bar();
  }
}

我的问题是,当我在其他类中使用此函数作为处理程序时,它当然会绑定到窗口。

myFunApiCall('baz').catch(authError.catch);

我可以使用.bind

解决这个问题
myFunApiCall('baz').catch(authError.catch.bind(authError));

但我真的不喜欢那种语法,特别是当我知道我的catch函数永远不会让this引用除了它的类之外的任何东西时。

有没有办法可以为我的函数提供永久this引用它的类?

1 个答案:

答案 0 :(得分:1)

如果在构造函数中定义catch方法,则可以通过这种方式强制将方法绑定到其对象:

function AuthError() {
    this.foo = "Something important!";
    this.catch = function() {
        // use this here
    }.bind(this);
}

var authError = new AuthError();

myFunApiCall('baz').catch(authError.catch);

这使得该类型的每个对象上的每个.catch()方法都是一个独特的函数,它预先绑定到它所来自的实例。