javascript - 将一组回调函数减少为一个回调

标签 javascript function underscore.js reduce

我想知道如何创建一个函数来调用数组中的所有函数,而无需显式创建函数。我说的是普通的 javascript(或者可能是一些 underscore.js/lodash 助手,但我没有发现任何有用的东西)。

假设我们有一个需要回调的方法:

function doSmth(cb) {
  console.log('doing smth');
  cb();
}

现在我们有三个想要调用的函数,但我们不想显式创建包装函数。

function write1() {
  console.log(1)
}

function write2() {
  console.log(2)
}

function write3() {
  console.log(3)
}

我们能否以某种方式将 [write1, write2, write3] 数组简化为单个函数?我尝试将 Function.prototype.call 绑定(bind)到 Array.prototype.forEach 但我没有得到任何结果。

编辑:我忘了提及我们不想修改 doSmth

最佳答案

您可以使用 forEach 和一些辅助函数。

let invoke = (fn, ...args) => fn(...args);
arr.forEach(invoke);

// or for an array of the results
let results = arr.map(invoke);

// es5 translation of invoke
var invoke = function() {
  var fn = arguments[0];
  var args = [].slice.call(arguments, 1, arguments.length);
  return fn.apply(null, args);
};

let doIt = arr.forEach.bind(arr, invoke)
takesACallback(doIt);

关于javascript - 将一组回调函数减少为一个回调,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/38149380/

相关文章:

javascript - JavaScript 中的多态性示例使用错误

javascript - 为什么事件在 Firefox 中未定义?

javascript - 使用下划线 countBy 作为数组中对象的嵌套属性

javascript - 在 initComponent 中声明时事件监听器不调用 Controller 方法

javascript - 多个 Canvas 作为带有 onclick 事件的按钮

javascript - 单击特定的 div 元素时移除文本的透明度。

javascript - Backbone : managing templates

javascript - AJAX 请求从 HTTPS 页面到 HTTP Url

javascript - 在函数内使用 getElementById (JavaScript)

javascript - 主干 View 不显示