有没有办法将数组/参数对象绑定到函数,类似于.apply允许使用参数数组调用函数?
例如,我正在构建下划线库的一部分,并且我试图使用传入的函数运行调用.setTimeout
,并绑定参数列表。但是,似乎.bind
期待我单独列出每个参数。
_.delay = function(func, wait) {
var args = Array.prototype.slice.call(arguments, 2);
return setTimeout(func.bind(this, args), wait);
};
这不起作用。
答案 0 :(得分:1)
这有点棘手,但你可以.apply
.bind
方法。您只需将要绑定的函数作为第一个参数传递,并将this
参数作为数组的第一个索引。然后剩余的索引将作为参数传递。
var func = function(a, b, c) {
console.log(a, b, c);
};
setTimeout(func.bind.apply(func, [this, 1, 2, 3]), 100);

你必须构建你的args
这样的东西:
var args = Array.prototype.slice.call(arguments, 2);
args.unshift(this);
或类似的东西:
var args = [this].concat(Array.prototype.slice.call(arguments, 2));
答案 1 :(得分:0)
在ES6中:
func.bind(thisArg, ...argsArray)
在封面下的内容与另一个答案中显示的bind.apply
相同。
然而,似乎随着箭头功能的出现,我们越来越少地使用bind
。而不是写
func.bind(0, a, b, c)
这迫使我们指定一个thisArg
第一个参数即使我们不在乎,我们现在可以写
() => func(a, b, c)
实际上更短。当然,我们总是能够将其写成
function() { return func(a, b, c); }
但那会更加冗长。