我需要定义一个回调,它将由外部库调用。使用1个参数调用此回调:
function(item) {};
在我的情况下,我需要包含第二个参数,我目前通过使用' bind'方法
function(item) {
var value = this.value
}.bind({'value': value});
每次我需要定义一个回调函数时,我都不想写这个。相反,我想写这样的东西:
function(item, value) {};
然后将其转换为bind方法以满足外部库。
这可能吗?或者还有其他方法可以做到这一点吗?
由于
答案 0 :(得分:1)
您想要使用闭包。这是基本模式,虽然不像georg建议的那么简单。但是在性能方面,并没有那么大的打击(接近最小)。
定义一个函数:
myValueFunction(value, fn){
return fn;
}
由于您似乎在说您的插件正在提供item
并且您提供value
,因此您将myValueFunction(yourvalue, function(item){})
设置为插件的回调函数(具有您的实际值)作为参数)。它将“返回”另一个函数,其值包含一个参数(item)。
例如,如果你有一个插件:
var myValue= "x";
plugin.doSomething("Plugin Argument", myValueFunction(myValue, function(item){
console.log(item, value);
}));
这基本上就是georg的答案(他的方式更为通用),但是如果你直接定义这些函数,他的方法在性能上会慢得多,特别是如果你开始添加很多参数。 / p>
答案 1 :(得分:0)
您可以使用here中的function.partial实现:
Function.prototype.partial = function(){
var fn = this, args = Array.prototype.slice.call(arguments);
return function(){
var arg = 0;
for ( var i = 0; i < args.length && arg < arguments.length; i++ )
if ( args[i] === undefined )
args[i] = arguments[arg++];
return fn.apply(this, args);
};
};
定义这样的回调:
callback = function(item, value) { console.log(item + value) }.partial(undefined, "myValue")
现在,当您致电callback('myItem')
时,它会正确显示“myItem myValue”