this - это первый аргумент при вызове связанной функции myFunc.bind(thisArg).
Роль .bind() заключается в создании новой функции, при вызове которой контекст будет первым аргументом, передаваемым в .bind(). Это мощная техника, позволяющий создавать функции с предопределенным значением this.
Давайте посмотрим, как задать this для связанной функции:
const numbers = {
array: [3, 5, 10],
getNumbers() {
return this.array;
}
};
// Создаем связанную функцию
const boundGetNumbers = numbers.getNumbers.bind(numbers);
boundGetNumbers(); // => [3, 5, 10]
// Отделяем метод от объекта
const simpleGetNumbers = numbers.getNumbers;
simpleGetNumbers(); // => undefined или ошибка в строгом режиме
numbers.getNumbers.bind(numbers) возвращает функцию boundGetNumbers, контекст которой привязан к numbers. Затем вызывается boundGetNumbers() с this равным numbers и возвращает правильный объект массива.
Функция numbers.getNumbers извлекается в переменную simpleGetNumbers без привязки. При последующем вызове функции simpleGetNumbers() контекст this будет равен window или undefined в строгом режиме, но не объект numbers (см. 3.2). В этом случае simpleGetNumbers() некорректно вернет массив.