@campus1

Объясните как работает этот код?

Читаю книгу Стоянова JavaScript. Шаблоны и там была имплементация функции bind.
Function.prototype.myBind = function(obj) {
    let fn = this,
        slice = Array.prototype.slice,
        args = slice.call(arguments, 1); //
    return function() {
        return fn.apply(obj, args.concat(slice.call(arguments))); //
    }
}


Можете пожалуйста объяснить, что и как происходит (особенно интересно про те куски которые отмечены слешами)
  • Вопрос задан
  • 187 просмотров
Решения вопроса 2
lazalu68
@lazalu68
Salmon
Разжевать конечно можно было бы, но чисто в образовательных целях было бы круче, если б вы сказали что именно вам там непонятно. Тогда я мог бы объяснить вам принцип работы конкретного непонятного вам механизма и у вас было бы достаточно знаний чтобы додумать, как работает приведённая конструкция в целом.
Ответ написан
Stalker_RED
@Stalker_RED
К прототипу функции добавляется новый метод myBind, который принимает на вход объект первым параметром.

Этот метод запоминает текущий контекст (fn), запоминает остальные аргументы, если они есть (args)
Для этого вызывается функция slice
С такими параметрами она вернет все аргументы, кроме первого.

Затем он возвращает функцию, которая запомненному контексту заменит this на переданный объект, и объединит аргументы переданные при создании, с теми, что будут переданы при вызове.

Я все понял, кроме этого args.concat(slice.call(arguments))

Объединяются аргументы переданные при создании и при его последующих вызовах.
https://jsfiddle.net/oceaL85e/
Ответ написан
Пригласить эксперта
Ваш ответ на вопрос

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

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