通常我会写一个像这样的.forEach:
_.forEach(results, function(result){
console.log(result);
});
如果我想提取该方法,我可以这样做:
logIt: function(result){
console.log(result);
}
_.forEach(results, logIt);
有没有办法提取函数并仍传入参数?例如,如果我的函数是这样的:
_.forEach(results, function(result){
if(log){
console.log(result);
}
});
我怎样才能将结果和日志变量都传递给函数?
答案 0 :(得分:1)
function logIt2(log){
return function(result){
if(log){
console.log(result);
}
}
}
_.forEach( results, logIt2(logger) );
答案 1 :(得分:1)
您可以使用_.bind
进行部分申请:
绑定
_.bind(function, object, [*arguments])
将函数绑定到对象,这意味着无论何时调用该函数,其值都将是对象。 (可选)将参数传递给函数以预先填充它们,也称为部分应用程序。
所以你可以这样说:
f = function(x, y) { ... };
g = _(f).bind(null, 11);
使g(6)
与f(11, 6)
的行为相同。
所以,如果你有这个:
var obj = {
logIt: function(log, result) {
if(log)
console.log(result);
}
};
然后你可以说:
_.forEach(result, _.bind(obj.logIt, null, whatever_log_should_be));
在迭代期间将whatever_log_should_be
作为log
参数传递。如果您需要this
内的特定logIt
,请使用该值代替null
:
_.bind(obj.logIt, obj, ...)