Небольшое замечание относительно метода bind(). Вы можете привязать функцию только один раз, последующие попытки уже привязанной функции ничего не изменят.
Пример:
function printGreetings () {
return console.log(this.phrase);
};
const dataGreetings = {
phrase: "Hello World!",
};
const dataFarewell = {
phrase: "Goodby for now!",
};
// first attempt to bind printGreetings to dataGreetings
const printHello = printGreetings.bind(dataGreetings);
printHello(); // -> "Hello World!"
// second attempt won't change anything
const printFarewell = printHello.bind(dataFarewell);
printFarewell(); // -> can't be bound twice so will print: "Hello World!"