С момента появления ES6 вы можете использовать синтаксис распространения в вызове функции:
] const args = [1,2,3]; fn (... аргументы); функция fn () {console.log (аргументы); }
До ES6 вам нужно было использовать apply
.
var args = [1,2,3]; fn.apply (нуль, аргументы); функция fn () {console.log (аргументы); }
Оба будут производить эквивалентный вызов функции:
fn(1,2,3);
Обратите внимание, что я использовал null
в качестве первого аргумента примера apply
, метод slice .
function fn () {var args = Array.prototype.slice.call (аргументы); console.log (аргументы); } fn (1,2,3);
Edit: В ответ на ваш комментарий, да, вы можете использовать метод shift
и установить его возвращаемое значение в качестве контекста ( this
ключевое слово) в вашей функции:
fn.apply(args.shift(), args);
Но помните, что shift
удалит первый элемент из исходного массива, и ваша функция будет вызываться без этого первого аргумента.
Если вы по-прежнему необходимо вызывать вашу функцию со всеми остальными аргументами, вы можете:
fn.apply(args[0], args);
И если вы не хотите изменять контекст, вы можете извлечь первый аргумент внутри своей функции:
function fn (firstArg, .. .args) {console.log (аргументы, firstArg); } fn (1, 2, 3, 4)
В ES5 это было бы немного более подробным.
функция fn () {var args = Array.prototype.slice.call (аргументы), firstArg = args.shift (); console.log (аргументы, firstArg); } fn (1, 2, 3, 4);