以与jQuery.proxy()相同的方式调用lodash _.bind()?

时间:2015-08-03 15:30:40

标签: javascript jquery proxy bind lodash

据我可以从Lodash documentation推断,_.bind(func, thisArg, [partials])只返回func的版本,其中this的范围与您传入thisArg的任何内容绑定{1}}。但是,您需要单独调用该函数,即:

var boundFunction = _.bind(aFunction, aThisTarget);
boundFunction();

有没有办法在lodash中使用_.bind()或不同的函数,方法可以使用jQuery的.proxy(),因为它会立即调用传入范围的函数?

我不需要/想要将找到的函数保存到变量中,因为它是回调的一部分。我只想激发一个具有不同范围的函数(立即)。 IE:

this.loadScripts(function() {
    // do something   
}, $.proxy(this, 'doSomethingElse', 'params') );

2 个答案:

答案 0 :(得分:3)

LoDash _.bind早期绑定。它需要函数对象和上下文来绑定它。

jQuery $.proxy(在您的代码中)是后期绑定,它需要(不是函数本身,而是函数的名称)和上下文。 LoDash也有后期绑定:_.bindKey

主要区别在于后期绑定是懒惰的:它允许将函数绑定到对象,即使它还没有实际功能:

var context = {}
var myMethod = _.bindKey(context, 'myMethod') // object is still empty
context.myMethod = function () { console.log('context:', this); }
myMethod() // will output proper context

它还允许不在代码中复制上下文名称:)

// bind
_.bind(context.myMethod, context)
//     ^ 1               ^ 2

// bindKey
_.bindKey(context, 'myMethod')
//        ^ 1
另一方面,早期绑定更明确,因为它需要绑定实际函数,而不是键。

答案 1 :(得分:0)

看看method()

this.loadScripts(function() {

}, _.method(this, 'doSomethingElse', 'params'));