今天从藤,在網(wǎng)上看到j(luò)avascript的[].forEach.call()寫法,剛看到的時(shí)候有點(diǎn)蒙咳秉,不是太明白是什么意思!后來到網(wǎng)上查了一下,其實(shí)這東西是個(gè)簡(jiǎn)寫的寫法从铲。如下:
function forEach(elems, callback) {
if([].forEach) {
[].forEach.call(elems, callback);
} else {
for(var i = 0; i < elems.length; i++) {
callback(elems[i], i);
}
}
}
[] 就是個(gè)數(shù)組,而且是用不到的空數(shù)組,用來就是為了訪問它的數(shù)組相關(guān)方法幔崖。那完整的寫法是什么呢食店?
其實(shí)是這樣的:
Array.prototype.forEach.call(...);
很顯然,簡(jiǎn)寫更方便赏寇。
js中的forEach 方法吉嫩,它可以接受一個(gè)函數(shù)參數(shù),如下:
[1,2,3].forEach(function (num) { console.log(num); });
上面的這句代碼中嗅定,我們可以訪問 this 對(duì)象自娩,也就是 [1,2,3] ,可以看出,這個(gè) this 是個(gè)數(shù)組忙迁。
最后脐彩, .call 是一個(gè)prototype,JavaScript函數(shù)內(nèi)置的姊扔。 .call 使用它的第一個(gè)參數(shù)替換掉上面說的這個(gè) 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嵌言。