ООП в JavaScriptНаследованиеhard

Декоратор autobind

Что выведется в консоль?

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"