使用Array.prototype.slice.call(arguments);
提到這個,就不得不說一下call()和apply()這兩個方法
call:B.call(A, arguments) ? A,B為兩個對象莉恼,arguments為參數(shù)孽拷,可以傳入多個音五,此方法可以使得A對象去調(diào)用B對象的方法
apply:B.apply(A, arguments) ?A,B為兩個對象料滥,arguments為參數(shù)徘跪,只能以數(shù)組的形式傳入?yún)?shù)淳梦,此方法可以使得A對象去調(diào)用B對象的方法
我們來看一個例子:
```
function add(a,b)
{?
? ? alert(a+b);?
}?
functionsub(a,b)
{?
? ? alert(a-b);?
}?
add.call(sub,1,1);//? 結(jié)果是析砸?? ‘2’? 還是? ‘0’? 呢
```
call 就是中間牽線的,sub說 我需要 add 你的方法 和技能爆袍,
比如:add會飛天 首繁,但sub 不會飛作郭,現(xiàn)在sub想飛,但add不讓它飛弦疮,所以sub就叫來了 call 這個東西夹攒, call直接把add爆菊
加上一個 點 然后把sub抱到括號里,然后 sub 就直接把add 的“飛天”技能學(xué)會了胁塞,回到函數(shù)
function add(a,b)
{?
? ? alert(a+b);?
}?
functionsub(a,b)
{?
? ? alert(a-b);?
}?
add.call(sub,1,1);
//? 結(jié)果是sub直接集成了add的“飛天”技能subalert里面 直接變成了 “a+b”咏尝!主角還是sub,并不是add
例子部分轉(zhuǎn)自https://blog.csdn.net/xllily_11/article/details/51480723
接下來回到我們的問題啸罢,我們使用Array.prototype.slice.call(arguments)將函數(shù)中的類數(shù)組轉(zhuǎn)換成的真正的數(shù)組编检,
我們使得arguments調(diào)用了Array對象中的slice方法,這里要注意slice扰才,首先允懂,slice有兩個用法,一個是String.slice,
一個是Array.slice衩匣,第一個返回的是字符串蕾总,第二個返回的是數(shù)組
這里我們的slice方法沒有寫參數(shù),默認(rèn)從’0‘”開始切割至末尾琅捏,我們主要是利用Array.slice方法返回數(shù)組把其轉(zhuǎn)換成真正的數(shù)組生百。