使用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方法返回數組把其轉換成真正的數組。