Я хотел бы вызвать функцию, используя массив в качестве параметров:
const x = ['p0', 'p1', 'p2'];
call_me(x[0], x[1], x[2]); // I don't like it
function call_me (param0, param1, param2 ) {
// ...
}
Есть ли лучший способ передачи содержимого x
в call_me()
?
javascript
arrays
function
call
Роберт
источник
источник
Почему бы вам не передать весь массив и не обработать его как нужно внутри функции?
источник
call_me
функции. Ему просто не хватает точки с запятой в конце.Предполагая, что call_me является глобальной функцией, поэтому вы не ожидаете, что она будет установлена.
источник
В стандарте ES6 есть новый оператор распространения,
...
который делает именно это.Он поддерживается всеми основными браузерами, кроме IE.
Оператор распространения может сделать много других полезных вещей, и связанная документация действительно показывает это.
источник
Как ответил @KaptajnKold
И вам не нужно определять все параметры для функции call_me. Вы можете просто использовать
arguments
источник
Обратите внимание на это
// ---------------------------
HTML-страница
может вызывать функцию с любым аргументом
или
источник
Аргументы функции также могут быть массивами:
Конечно, можно также использовать спред :
источник
При использовании оператора распространения мы должны отметить, что это должен быть последний или единственный переданный параметр. Иначе это не удастся.
Если вам нужно передать массив в качестве начального аргумента, вы можете сделать:
источник
Вы можете использовать оператор распространения в более простой форме
в случае функций, которые возвращают массивы, но ожидают передачи в качестве аргументов
Пример:
источник
Ответ уже дан, но я просто хочу дать свой кусок пирога. То, чего вы хотите достичь, называется
method borrowing
в контексте JS, когда мы берем метод из объекта и вызываем его в контексте другого объекта. Весьма распространено брать методы массива и применять их к аргументам. Позвольте привести пример.Итак, у нас есть «супер» хеш-функция, которая принимает два числа в качестве аргумента и возвращает «супер-безопасную» хэшированную строку:
Пока все хорошо, но у нас небольшая проблема с вышеуказанным подходом, он ограничен, работает только с двумя числами, который не является динамическим, давайте сделаем так, чтобы он работал с любым числом, и плюс вам не нужно передавать массив (вы можете если вы все еще настаиваете). Хорошо, хватит говорить, давай драться!
Естественным решением было бы использовать
arr.join
метод:О чувак. К сожалению, это не сработает. Поскольку мы вызываем хеш (аргументы) и аргументы, объект является итеративным и похожим на массив, но не реальным массивом. Как насчет подхода ниже?
Трюк называется
method borrowing.
Мы заимствуем
join
метод из обычного массива[].join.
и используем его[].join.call
для запуска в контекстеarguments
.Почему это работает?
Это потому, что внутренний алгоритм нативного метода
arr.join(glue)
очень прост.Взято из спецификации почти «как есть»:
Итак, технически он берет это и соединяет это [0], это [1] ... и т.д. вместе. Он намеренно написан так, что допускает любой массив, подобный этому (не случайно, многие методы следуют этой практике). Вот почему это также работает с
this=arguments.
источник