j0hnik, в es6
можнонужно так: function(...args){...}
Sinevik,
[].slice.call(arguments)
arguments -
массивоподобный объект, содержащий все переданные в функцию параметры, независимо от их количества.
массивоподобный - имеющий числовые ключи и свойство length, например {"0": "a", "1": "b", "length": 0}.
[] - создание пустого массива
.slice - ссылка на функцию slice и прототипа массивов, по сути то же самое что Array.prototype.slice, с той разницей что вызывается от имени созданного выше массива(т.е. внутренний this равен []).
.call - вызов функции с переопределением this на указанный первым параметром.
В данном случае в качестве this в функцию массива slice передаётся arguments.
Поскольку slice можно представить (очень условно) таким кодом
function slice(start, end){
var array = this; //в качестве исходного ?массива берём this
var length = array.length; //получаем его длину
var result = []; //создаём пустой массив для результатов
start |= 0; //приводим к int
if(typeof end === 'undefined') //если конец не указан
end = length; //то равен длине
else { //иначе
end |= 0; //приводим к int
if(end === 0 || -end >= length) //если конец перед нулевым элементом
return result; //сразу возвращаем пустой массив
if(end < 0) //если конец меньше нуля
end += length; //вычитаем из длины
if(end > length) //если конец больше длины
end = length; //то равен длине
}
if(start < 0) //если начало меньше нуля
start = -start > length ? 0 : start + length; //если начало перед нулевым элементом то начинаем с нуля иначе вычитаем из длины
while(start < end) result.push( //пока начало меньше конца добавляем в результирующий массив
array[start++] //значение по индексу начала и передвигаем начало на 1 впердё
);
return result //возвращаем результирующий массив
}
то ничего не мешает использовать эту функцию для получения из
массивоподобных объектов настоящих массивов. А поскольку slice функция встроенная, то работать она должна гораздо быстрее чем ручная реализация выше.