这是我发明的一个简单函数,用于测试JavaScript的argument
对象与休息参数。
function f(a, b, ...theArgs) {
console.log(theArgs);
console.log(arguments);
return arguments;
}
如果我调用此函数,请使用以下参数:f(1,2,6,5,8,9,10,'a')
我将获得两个控制台日志,然后返回参数对象。太棒了。
但是,如果我将此功能传递给:
Array.prototype.slice(f(1,2,6,5,8,9,10,'a'), f.length)
,我将得到一个空数组,而不是像[6,5,8,9,10,'a']
这样的数组 - 在这种情况下,我的函数似乎返回一个空数组而不是arguments对象。
为什么?这是我的控制台的快照:
答案 0 :(得分:1)
Array.prototype
是您的代码正在切片的空数组,而不是f
的结果。
slice
的第一个参数必须是数字。在您的代码中,f
返回一个对象。如果您想要更改this
函数的slice
值,以便它切换对象,请使用.call
:
Array.prototype.slice.call(f(1, 2, 6, 5, 8, 9, 10, 'a'), f.length)
function f(a, b, ...theArgs) {
//console.log(theArgs);
//console.log(arguments);
return arguments;
}
console.log(Array.prototype.slice.call(f(1, 2, 6, 5, 8, 9, 10, 'a'), f.length));