怎么理解[].forEach.call()?

今天,在網(wǎng)上看到j(luò)avascript的[].forEach.call()寫法,剛看到的時候有點蒙,不是太明白是什么意思!后來到網(wǎng)上查了一下,其實這東西是個簡寫的寫法。如下:

function forEach(elems, callback) {
  if([].forEach) {
    [].forEach.call(elems, callback);
  } else {
    for(var i = 0; i < elems.length; i++) {
      callback(elems[i], i);
    }
  }
}


[] 就是個數(shù)組,而且是用不到的空數(shù)組,用來就是為了訪問它的數(shù)組相關(guān)方法。那完整的寫法是什么呢?
其實是這樣的:

Array.prototype.forEach.call(...);

很顯然,簡寫更方便。
js中的forEach 方法,它可以接受一個函數(shù)參數(shù),如下:

[1,2,3].forEach(function (num) { console.log(num); });

上面的這句代碼中,我們可以訪問 this 對象,也就是 [1,2,3] ,可以看出,這個 this 是個數(shù)組。

最后, .call 是一個prototype,JavaScript函數(shù)內(nèi)置的。 .call 使用它的第一個參數(shù)替換掉上面說的這個 this ,也就是你要傳人的數(shù)組,其它的參數(shù)就跟 forEach 方法的參數(shù)一樣了。

[1, 2, 3].forEach.call(["a", "b", "c"], function (item, i, arr) {
    console.log(i + ": " + item);
});
// 0: "a"
// 1: "b"
// 2: "c"

因此, [].forEach.call() 是一種快速的方法訪問 forEach ,并將空數(shù)組的 this 換成想要遍歷的list。

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務(wù)。

推薦閱讀更多精彩內(nèi)容

  • 第5章 引用類型(返回首頁) 本章內(nèi)容 使用對象 創(chuàng)建并操作數(shù)組 理解基本的JavaScript類型 使用基本類型...
    大學(xué)一百閱讀 3,265評論 0 4
  • 黃河九曲至, 浩浩唱昭君。 落雁崖前雪, 秭歸故里人。 晚霞紅古道, 朝雨浥輕塵。 最喜晴明日, 鴻鵠送好音。
    高湛明閱讀 955評論 0 8