0

Как это работает? Для полного понимаю, посмотрите статью на Хабре.

var slice = Function.prototype.call.bind(Array.prototype.slice);

slice([1,2,3], 0, 1); // => [1]

var bind = Function.prototype.call.bind(Function.prototype.bind);

  • 2
    Для полного понимаю, посмотрите статью на Хабре. - нет, так не пойдет. Всё относящееся к вопросу должно быть в нём. А читать статьи на хабре, чтобы ответить на вопрос - ну это как-то перебор – Алексей Шиманский Nov 13 '17 at 18:05
  • @АлексейШиманский все что нужно для вопроса я указал, просто там есть полная таблица того, как наводились примеры. – Виталик Черный Nov 13 '17 at 18:07
  • Честно говоря непонятно в чем вопрос заключается. Как работают Bind, Call и Apply? Тогда причем тут "Я пробовал аналогичную манипуляцию с функцией и контекст был window"? То есть непонятен у кого когда какой контекст? Или что? Вопрос надо бы пояснить. – Алексей Шиманский Nov 13 '17 at 18:12
  • 1
    Я пробовал аналогичную манипуляцию - нет, ты сделал совсем другое. Обрати внимание что происходит с результатом функции Function.prototype.call.bind в первом сниппете, и в твоем примере – Grundy Nov 13 '17 at 18:14
  • @АлексейШиманский var slice = Function.prototype.call.bind(Array.prototype.slice); возвращается функция call с привязным контекстом в виде метода slice. Вызывая переменную slice(функцию call) и передаем ей массив [1,2,3] и аргументы 0, 1 и это срабатывает, но я не пойму как это работает. – Виталик Черный Nov 13 '17 at 18:18
  • @Grundy спасибо что подметил. – Виталик Черный Nov 13 '17 at 18:20
  • @ВиталикЧерный, а ты читал статью на которую ты ссылаешься в вопросе? Там вроде подробно рассмотрено, что происходит в этой строчке кода – Grundy Nov 13 '17 at 18:22
  • @Grundy я понял. просто в this метода call вшили метод slice. ты не знаешь почему ошибка?

    `var a = Function.prototype.call;

    a(); VM810:3 Uncaught TypeError: a is not a function at :3:1`

    – Виталик Черный Nov 13 '17 at 18:41
  • @ВиталикЧерный, EDGE дает более осмысленную ошибку: Function.prototype.call: 'this' is not a Function object – Grundy Nov 13 '17 at 18:49

0 Answers0