我有一个具有单个样板函数的类,它可以处理我的承诺错误。
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
引用它的类?
答案 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()
方法都是一个独特的函数,它预先绑定到它所来自的实例。