Я устал от написания такого кода:
class Something {
constructor() {
this.method = this.method.bind(this);
this.anotherOne = this.anotherOne.bind(this);
// ...
}
}
Это отнимает много времени и легко забыть привязать метод. Мне известно о предложении полей классов, но оно все еще является этапом 3 и, похоже, сопровождается некоторыми проблемами .
Мое текущее решение (на основе этого ответа ) выглядит следующим образом:
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));