理解JavaScript里的 [].forEach.call() 写法(转)

参考:https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Array/forEach

document.querySelectorAll()返回的并不是我们想当然的数组,而是NodeList,对NodeList,它里面没有.forEach方法,我们使用了这样的方法进行循环:

var divs = document.querySelectorAll('div');

[].forEach.call(divs, function(div) {

// do whatever

div.style.color = "red";

});

初次看到[].forEach.call()这样的代码,我觉得这种写法很有趣,为什么要这样写?为什么要用空数值引申出的方法?于是研究了一下。

[]就是个数组,而且是用不到的空数组。用来就是为了访问它的数组相关方法,比如.forEach。这是一种简写,完整的写法应该是这样:

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

很显然,简写更方便。

至于forEach 方法,它可以接受一个函数参数:

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

上面的这句代码中,我们可以访问this对象,也就是[1,2,3],可以看出,这个this是个数组。

最后,.call是一个prototype,JavaScript函数内置的。.call使用它的第一个参数替换掉上面说的这个this,也就是你要传人的数组,其它的参数就跟forEach方法的参数一样了。

[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,并将空数组的this换成想要遍历的list。

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
【社区内容提示】社区部分内容疑似由AI辅助生成,浏览时请结合常识与多方信息审慎甄别。
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

相关阅读更多精彩内容

友情链接更多精彩内容