我厌倦了写这样的代码:
class Something {
constructor() {
this.method = this.method.bind(this);
this.anotherOne = this.anotherOne.bind(this);
// ...
}
}
这是一个耗时的过程,而且很容易忘记绑定方法。我知道有类字段提案,但它仍处于第三阶段,似乎存在一些问题。
我的当前解决方案(基于这个答案)看起来像这样:
class Something {
constructor() {
// Get all defined class methods
const methods = Object.getOwnPropertyNames(Object.getPrototypeOf(this));
// Bind all methods
methods
.filter(method => (method !== 'constructor'))
.forEach((method) => { this[method] = this[method].bind(this); });
}
}
这似乎可行,但我想知道是否有更好的方法,或者这种方法是否存在我不知道的问题。
更新:为什么要这样做?
我遇到的问题是,如果我没有在构造函数中绑定类函数,我必须记得稍后“正确”地调用它们。例如:
const classInstance = new Something();
// This fails for a non-obvious reason
someAction()
.then(classInstance.method);
// This works of course but looks like we created a useless function if you don't know better
someAction()
.then(result => classInstance.method(result));
this.self = this
的方法怎么样?这里没有讨论到…… - Ryan