Что выведется в консоль?
class A { constructor(x) { this.x = x; } classicMethod() { console.log(this.x); } arrowMethod = () => { console.log(this.x); } } const a = new A("xxx"); setTimeout(a.classicMethod, 100); setTimeout(a.arrowMethod, 200);
В случае классического метода мы потеряем контекст. В зависимости от наличия строгого режима this будет равен globalThis или undefined.
Во втором случае мы используем public class fields в комбинации со с arrow function expressions. Таким значение образом this закрепляется равным экземпляру объекта.
Реализуйте функцию autobind
, которая автоматически привязывает методы класса к экземпляру.
const AutoBoundA = autobind(A); const a = new AutoBoundA("yyy"); setTimeout(a.classicMethod, 100); // "yyy" setTimeout(a.arrowMethod, 200); // "yyy"