如何将参数对象绑定到JavaScript中的函数?

时间:2016-06-30 21:21:02

标签: javascript javascript-objects

有没有办法将数组/参数对象绑定到函数,类似于.apply允许使用参数数组调用函数?

例如,我正在构建下划线库的一部分,并且我试图使用传入的函数运行调用.setTimeout,并绑定参数列表。但是,似乎.bind期待我单独列出每个参数。

_.delay = function(func, wait) {
  var args = Array.prototype.slice.call(arguments, 2);
  return setTimeout(func.bind(this, args), wait);
};

这不起作用。

2 个答案:

答案 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); }

但那会更加冗长。