- 2018-05-22 創(chuàng)建
先說結(jié)果:
Array.apply(null, {length:5}) //返回[undefined, undefined, undefined, undefined, undefined]
Array.apply(null, {length: 5}) length
為特殊字段忍啸,意思是生成一個長度為5的數(shù)組蓝撇,由于沒賦值疆股,所以都是undefined
.
和ES6的Array.from
有點類似, Array.from
apply()
apply() 的第一個參數(shù)是對象,第二個參數(shù)是數(shù)組贫贝,作為參數(shù)列表介粘。
然后其實第二個參數(shù)只要是個類數(shù)組對象就可以了殖氏,比如 {length: 5}
就可以看作一個類數(shù)組對象,長度是 5.
所以
Array.apply(null, { length: 5})
相當于
Array(undefined, undefined, undefined, undefined, undefined)
call() , apply()
進一步姻采, 實際 這個 和 Array
沒有任何關(guān)系受葛,只是碰巧使用 Array 時遇到了。
我覺得這個問題應(yīng)該從 Function.call
和 Function.apply
來入手偎谁。
這兩個 函數(shù)的方法 功能都是一樣的总滩,都是為了改變 this
的指向。
唯一的區(qū)別就是參數(shù)不一樣巡雨,apply
的第二個參數(shù)必須傳入數(shù)組闰渔。
for example
首先定義個 iAmArray
函數(shù):
var iAmArray = function(){
return arguments;
};
這里不用管this,下面是正常調(diào)用它的三種方式:
//普通寫法
iAmArray(1,2,3);
/*
[1, 2, 3]
*/
//call寫法
iAmArray.call(null,1,2,3);
/*
[1, 2, 3]
*/
//apply寫法
iAmArray.apply(null,[1,2,3]);
/*
[1, 2, 3]
*/
apply方式調(diào)用時铐望,只要是 Object冈涧,還有l(wèi)ength茂附,它就當作類數(shù)組處理了,實際和 Array 沒有任何關(guān)系督弓,任何函數(shù)都會這樣营曼。