Следующий фрагмент кода (из MSDN) является простой реализацией функции «привязки»:Использование массива Prototype фрагмент вызова
/* Approximation of `Function.prototype.bind` from ES5 (without error checking) */
Function.prototype.bind = function(thisArg) {
var fn = this, args = *Array.prototype.slice.call(arguments, 1)*;
return function() {
return fn.apply(thisArg, args.concat(*Array.prototype.slice.call(arguments, 0)*));
};
};
Может кто-нибудь объяснить, первый вызов Array.prototype.slice.call? Я понимаю, что аргументы не являются массивом, и нужно использовать его в массиве перед использованием среза и concat. Я не понимаю первого вызова - не теряем ли мы первый элемент при вызове
Array.prototype.slice.call(arguments, 1)?
ОК, который немного разъясняет. Однако почему необходимость concat args с аргументами в fn.apply? Я бы подумал, что как только мы создадим переменную args, мы просто передадим ее для применения. –
@Joel_Blum Я объяснил это в последней части и в коде. – Joseph