Здравствуйте!
На MDN при описании встроенной в язык функции bind() приводится следующий пример :
var unboundSlice = Array.prototype.slice;
var slice = Function.prototype.call.bind(unboundSlice);
// . . .
slice(arguments);
Я понимаю что это сокращение конструкции 
let args = Array.prototype.slice.call(arguments) НО вот хоть убей не понятен момент с 
bind(), если следовать логике устройства 
bind() это вспомогательная утилита выглядит примерно так . . .
Function.prototype.bind = function(contextObject){
        let funkToBind = this,
             args = Array.prototype.slice.call(arguments,1)
        return funkToBind.apply( contextObject , args.concat(Array.prototype.slice.call( arguments )))
} // упращение, сущности данной функции
Тоесть метод 
bind() возвращает новую функцию, которая через замыкание на внешнюю функцию получает контекст, в котором и будет вызываться, т.е. 
let b = [1,2];
function ass(){
  return this;
};
console.log((ass.bind(b))()) // [1, 2]
Здесь всё понятно, но я не понимаю случая, когда в 
call.bind() передаётся 
функция  в качестве контекста (т.е. то, на что будет указывать 
thisпри вызове 
call()) : 
slice = Function.prototype.call.bind(Array.prototype.slice);
function m(){
    console.log(
       slice(arguments).sort(
        (m,a)=>m-a
       )
    );
};
m(5,3,2,4,1); // [1, 2, 3, 4, 5]
Получается что в данном случа наш вызов утрированно можно переписать следующим образом?
. . .call.bind(Array.prototype.slice){
   return call.apply(Array.prototype.slice)
};
И получается что 
call() будет вызываться в контексте функции (ну разумеется объекта функции 
slice(), т.к. в 
js функции тоже являются объектами)? Хм, ну то, что в результате происходит мне понятно, но вот как работает вызов 
call() когда контекстом ему передаётся функция мне не очень понятно , т.е. 
thisпри вызове 
call() в примере выше будет указывать на 
[].prototype.slice, в общем быть может кто-нибудь объяснит где мои размышления пошли нетуда, или быть может моё понимание, или я просто что-то путаю, НО я вижу в этой ситуации (сейчас программистам будет сложно, внимание АБСТРАЦИЯ) два пункта, пункт А, в котором два дома, и три жителя (я их всех знаю, и знаю что у них в домах) и вижу пункт Б , который был создан этими тремя жителями из пунтка А, там тоже всё просто, два дома, НО я не пойму как жители пункта А создали это, как они сумели сделать это, и в какой последовательности. . . Извиняюсь за объем текста не нравится не читайте, если видите вопросы больше 6 строк. Пишу так подробно чтобы избежать как минимум 2-ух ответов, и 60ти комментов в духе "чувак, 
call() вызывает функцию в контексте какого-то объекта, или 
bind() возвращает новую функцию, или 
[].prototype.slice нужно чтобы создать новый массив из 
arguments) и прочая трата времени, плавали , знаем! И если 
Вы решили написать ответ, попрошу обратить внимание на то, что 
Я ПОНИМАЮ / 
НЕ ПОНИМАЮ в этой ситуации , т.к. я довольно подробно постарался описать видение проблемы со своей стороны ! Спасибо за понимание и терпение !