Проще говоря, функция Array.prototype.slice
выглядит следующим образом:
Array.prototype.slice = function(from) {
return elements of `this` from index `from`;
};
, поэтому при выполнении Array.prototype.slice.call(obj, a)
вы получите obj
с элементами только из индекса a
.
Проблема в том, что он доступен только для массивов, но вы можете заставить его работать и над объектами, используя описанный вами синтаксис:
var obj = { length: 3, 0: 'a', 1: 'b', 2: 'c' };
Array.prototype.slice.call(obj, 1); // { length: 2, 0: 'b', 1: 'c' }
То же самое относится и к аргументам - это не такt массив, поэтому вам нужно получить доступ к функции с помощью Array.prototype.slice.call
.
По сути, единственное, что массивы отличаются от аргументов, это то, что массивы наследуются от Array.prototype
, так что вы можете вызывать arr.slice()
непосредственно.