在for循环中调用Function.prototype.call.apply

时间:2014-10-07 04:18:22

标签: javascript underscore.js prototype

我的目标是遍历一系列函数并依次调用每个函数。我想避免使用匿名函数,但我很难弄清楚我哪里出错了(使用下划线但是原则应该非常相似)

function wait() {
  console.log("wait")
}

function more() {
  console.log("more")
}

_.each([wait, more], Function.prototype.call.apply)
不幸的是,这个错误。

Uncaught TypeError: Function.prototype.apply was called on undefined, which is a undefined and not a function 

我认为这是因为迭代器func是用三个参数(item,index,array)调用的,而Function.prototype.call.apply在这种情况下需要null作为第二个参数,而不是索引。 / p>

当我尝试这个时,它失败并出现新错误

_.each([wait, more], _.partial(Function.prototype.call.apply, _, null)) 

Uncaught TypeError: Function.prototype.apply was called on [object Window], which is a object and not a function 

最后,这是有效的

unary = function(func) {
    return function(a) {
      return func.apply(a);
    };
};

_.each([wait, more], unary(_.partial(Function.prototype.call)))

1 个答案:

答案 0 :(得分:1)

你可以试试这个:

_.each([wait, more], function(f){ f(); });

甚至这个:

_.each([wait, more], function(f){ f.call(); });

更新:然后尝试:

_.each([wait, more], Function.prototype.call, Function.prototype.call)

使用第三个参数like this绑定上下文。检查the doc