3

例如假设我有以下两个功能

function a(param1) {
    console.log(param1);
}

function b(func, params) {
    func(params);
}

然后

b(a, 1);

按预期打印“1”

现在假设我有一个附加功能

function c(param1, param2) {
    console.log(param1, param2);
}

有没有办法做类似的事情

b(a, 1);

除了输入两个参数?类似于以下内容

b(c, [2, 3]);

其中 [2, 3] 数组展开为单独的参数

4

2 回答 2

5

像这样的东西:

function b(func) {
    func.apply(null, [].slice.call(arguments, 1));
}
于 2012-06-07T07:51:19.637 回答
2

你想使用apply函数的方法。所以在里面b,用func.apply(this, params)而不只是func(params)

第一个参数apply是要设置什么this;第二个参数是要传递给函数的参数数组。

所以类似的东西与假设b.foo(1,2,3)相同。foo.apply(b, [1,2,3])b.foo = foo

于 2012-06-07T07:48:36.823 回答