@MishaXXL

По какой логике bind принимает только первый контекст?

Наткнулся на такой кейс с bind, но не смог найти, по какой логике устроен bind, что он принимает только первый контекст, а остальные, нет, хотя конструкция предполагает, что мы можем по цепочке вызвать bind много раз.

const cat = { age: 10 }
const dog = { age: 20 }

function foo() {
   console.log(this.age)
}

const f = foo.bind(cat).bind(dog)
  • Вопрос задан
  • 111 просмотров
Решения вопроса 1
bingo347
@bingo347 Куратор тега JavaScript
Crazy on performance...
Метод bind возвращает новую функцию, которая уже игнорирует свой контекст и передаёт тот, который запомнила.
Если в коде, то это примерно так работает:
Function.prototype.bind = function bind(ctx, ...args) {
    const originalFunction = this;
    return function (...args2) {
        return originalFunction.apply(ctx, args.concat(args2));
    };
}
Как видите, возвращаемая функция уже никак не использует свой this.
Соответственно второй вызов bind его будет передавать в пустоту, однако может добавить аргументы.
Ответ написан
Пригласить эксперта
Ответы на вопрос 1
Alexandroppolus
@Alexandroppolus
кодир
Просто его так задумали. "Кто первый встал, того и тапки". Могли сделать по-другому, но сделали - так.
Ответ написан
Комментировать
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы