Для решения викторину JS, вы можете сделать это:
for (var x in fns) fns[x]();
Однако, я понимаю, что это не то, что вы просите :).
Есть несколько вещей, которые я не понимаю, в вашем подходе:
1) Почему вы используете .map()? Карта используется для возврата другого массива, который не нужен, поэтому почему вместо forEach() вместо этого?
2) Я не уверен, почему вы используете bind. При использовании map() обратный вызов передается 3 параметрам: текущая функция, индекс функции в массиве и сам массив. Когда вы смотрите на синтаксис для bind(), вы заметите, что первым параметром для bind является объект this, а затем параметры, которые должны передаваться в связанной функции. В этом случае «this» будет установлен на текущую функцию, индекс и массив будут переданы в качестве параметров функции.
3) Использование привязки по вызову. call() примет те же параметры bind(), где первый - это «это», а остальные - параметры, которые должны быть переданы в вызываемую функцию. Когда вы используете .bind(), он будет устанавливать этот объект как функцию, а первым параметром будет индекс. Итак, с точки зрения .call() вы устанавливаете «это» в функцию и передаете индекс в качестве первого параметра для вызова(), который является «этим», который затем передает весь массив как первый параметр для функции.
Короче говоря, вы все смешаете свои ценности, и ваше чрезмерное это.
[Как передать метод, определенный на прототипе, в Array.map как обратный вызов) (http://stackoverflow.com/questions/33006222/how-to-pass-the-method-defined-on-prototype-to -array-map-as-callback) – Tushar
@Tushar интересно, но если причина в том, что карта передает два аргумента, я не вижу, почему 'fns.map ((x, y) => Function.prototype.call.bind (x, y)) 'будет работать – xuanji
' bind' не привязан к 'call'. Вместо этого вы должны использовать 'fns.map (Function.prototype.bind, Function.prototype.call)' (или 'fns.map (Function.prototype.bind.bind (Function.prototype.call))', если вы предпочитают это) – Bergi