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不喜欢搜索特殊字符,所以它没有多大帮助.
JavaScript具有arguments伪数组和apply函数; 你可以这样做:
function FuncCallHack(Func) {
return Func.apply(this, [].slice.call(arguments, 1));
}
Run Code Online (Sandbox Code Playgroud)
这是如何工作的:
arguments- 这是一个伪数组,包含调用代码传递给函数的所有参数(包括format参数Func).
[].slice.call(arguments, 1)是一种获取除第一个参数之外的所有参数的数组的方法.(这是一个常见的习惯用法.它通过将Array#slice方法应用于arguments伪数组来工作,使用Function#call[ Function#apply下面很像,它只接受args以不同的方式传递].)遗憾的是,arguments它本身并不一定有slice方法因为它不是一个阵列.
然后我们使用该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)