使用Array.prototype.slice.call(arguments);
提到这个,就不得不说一下call()和apply()这两个方法
call:B.call(A, arguments) A,B为两个对象,arguments为参数,可以传入多个,此方法可以使得A对象去调用B对象的方法
apply:B.apply(A, arguments) A,B为两个对象,arguments为参数,只能以数组的形式传入参数,此方法可以使得A对象去调用B对象的方法
我们来看一个例子:
```
function add(a,b)
{
alert(a+b);
}
functionsub(a,b)
{
alert(a-b);
}
add.call(sub,1,1);// 结果是? ‘2’ 还是 ‘0’ 呢
```
call 就是中间牵线的,sub说 我需要 add 你的方法 和技能,
比如:add会飞天 ,但sub 不会飞,现在sub想飞,但add不让它飞,所以sub就叫来了 call 这个东西, call直接把add爆菊
加上一个 点 然后把sub抱到括号里,然后 sub 就直接把add 的“飞天”技能学会了,回到函数
function add(a,b)
{
alert(a+b);
}
functionsub(a,b)
{
alert(a-b);
}
add.call(sub,1,1);
// 结果是sub直接集成了add的“飞天”技能subalert里面 直接变成了 “a+b”!主角还是sub,并不是add
例子部分转自https://blog.csdn.net/xllily_11/article/details/51480723
接下来回到我们的问题,我们使用Array.prototype.slice.call(arguments)将函数中的类数组转换成的真正的数组,
我们使得arguments调用了Array对象中的slice方法,这里要注意slice,首先,slice有两个用法,一个是String.slice,
一个是Array.slice,第一个返回的是字符串,第二个返回的是数组
这里我们的slice方法没有写参数,默认从’0‘”开始切割至末尾,我们主要是利用Array.slice方法返回数组把其转换成真正的数组。