我有点试验_.bind(...)
。我看到了如何使用 bind 强制函数上下文,但还没有看到如何进行柯里化。
我尝试的是这样的:
add = function(number) { this.sum = this.sum + number; }
add5 = _.bind(add, { sum: 0 }, 5)
但是,调用add5()
, oradd5(5)
似乎并没有什么效果。
任何线索如何包装参数,以便从一个调用到另一个调用中保留上下文?
我有点试验_.bind(...)
。我看到了如何使用 bind 强制函数上下文,但还没有看到如何进行柯里化。
我尝试的是这样的:
add = function(number) { this.sum = this.sum + number; }
add5 = _.bind(add, { sum: 0 }, 5)
但是,调用add5()
, oradd5(5)
似乎并没有什么效果。
任何线索如何包装参数,以便从一个调用到另一个调用中保留上下文?
可能你想做部分应用,而不是currying/schönfinkeling。下划线具有此_.partial
功能:
function add(a, b) { return a+b; }
var add5 = _.partial(add, 5);
你也可以使用_.bind
,它有一些效果。例如:
var add5 = _.bind(add, null /*context is irrelevant*/, 5);
add5(3); // returns 8
但是,您的函数没有返回任何内容,并且您更改的上下文无法访问。然而:
var ctx1 = {sum: 0};
function add(a) { this.sum += a; } // returns nothing!
var addto1 = _.bind(add, ctx1);
addto1(5); // undefined
ctx1; // {sum: 5}
var add5to1 = _.bind(add, ctx1, 5);
add5to1(); // undefined
ctx1; // {sum: 10}
var ctx2 = {sum: 5};
add3to2 = _.bind(add, ctx2, 3);
add3to2(); // undefined
ctx2; // {sum: 8}