在JavaScript中,Lua的省略号相当于什么?

Wee*_*ine 5 javascript parameters syntax ellipsis optional-parameters

在Lua中,这样的函数是有效的:

function FuncCallHack(Func, ...)
    return Func(...)
end
Run Code Online (Sandbox Code Playgroud)

有没有办法在JavaScript中做到这一点?...对于那些不熟悉Lua的人来说,意味着"未分组数组形式的所有无索引参数".我尝试过...使用JavaScript,但它似乎没有功能,而且由于Google不喜欢搜索特殊字符,所以它没有多大帮助.

T.J*_*der 6

JavaScript具有arguments伪数组和apply函数; 你可以这样做:

function FuncCallHack(Func) {
    return Func.apply(this, [].slice.call(arguments, 1));
}
Run Code Online (Sandbox Code Playgroud)

这是如何工作的:

  1. arguments- 这是一个伪数组,包含调用代码传递给函数的所有参数(包括format参数Func).

  2. [].slice.call(arguments, 1)是一种获取除第一个参数之外的所有参数的数组的方法.(这是一个常见的习惯用法.它通过将Array#slice方法应用于arguments伪数组来工作,使用Function#call[ Function#apply下面很像,它只接受args以不同的方式传递].)遗憾的是,arguments它本身并不一定有slice方法因为它不是一个阵列.

  3. 然后我们使用该Function#apply方法(所有JavaScript函数都有它)Func使用与调用相同的this值进行调用FuncCallHack,并传递除了Func它之外的所有参数.

您也可以稍微不同地定义它:

function FuncCallHack(Func, args) {
    return Func.apply(this, args);
}
Run Code Online (Sandbox Code Playgroud)

...这仍然很容易使用:

FuncCallHack(SomeFunction, [1, 2, 3]);
// Note this is an array --^-------^
Run Code Online (Sandbox Code Playgroud)