Можно ли использовать «call» или «apply» для передачи массива аргументов сразу нескольким функциям? - PullRequest
0 голосов
/ 14 апреля 2019

Например, допустим, у меня есть две функции a и b, и оба a и b принимают два аргумента string и затем записывают эти строки в консоль:

function a(w, x) {
  console.log(w, x);
}

function b(y, z) {
  console.log(y, z);
}

Можно ли вызвать a и b, используя call или apply, чтобы передать массив аргументов обеим функциям одновременно?

Например, вот некоторый псевдокод:

(a, b).apply(window, ["Wello", "Horld"]);

Возможно ли достичь этого без использования циклов или чего-то такого:

var args = ["Wello", "Horld"];
a.apply(window, args);
b.apply(window, args);

Кроме того, можно ли вызывать более двух функций одновременно?

ПРИМЕЧАНИЕ: функции могут работать в любом порядке.

Спасибо.

Ответы [ 3 ]

2 голосов
/ 14 апреля 2019

Можно ли вызвать a и b, используя call или apply, чтобы передать массив аргументов обеим функциям одновременно?

...

Возможно ли достичь этого без использования циклов или чего-то такого ...

Нет. Вы должны делать то, что вы описали, либо помещая аргументы в массив и делая каждый вызов, либо просматривая массив функций и т. Д.

Например:

for (const f of [a, b]) {
    f.apply(window, ["Wello", "Horld"]);
    // Or if you have the arguments as discrete things like that, I'd use call:
    //f.call(window, "Wello", "Horld");
}
2 голосов
/ 14 апреля 2019

Вам все еще может потребоваться некоторая итерация для функций, помещая функции в массив и вызывая их с помощью Function#apply.

function a(w, x) {
    console.log(w, x);
}

function b(y, z) {
    console.log(y, z);
}

[a, b].forEach(fn => fn.apply(window, ["Wello", "Horld"]));
1 голос
/ 14 апреля 2019

Вам нужно использовать какую-то петлю.

const args = ["Wello", "Horld"];
[a, b].forEach(f => f.apply(Windows, args));

Подойдет.Это работает для столько функций, сколько вы хотите.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...