理解JavaScript里的 [].forEach.call() 写法
2016-03-09 10:27
483 查看
因为
初次看到
很显然,简写更方便。
至于
上面的这句代码中,我们可以访问
最后,
因此,
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。
相关文章推荐
- JQuery1——基础($对象,选择器,对象转换)
- Android学习笔记(二九):嵌入浏览器
- Android java 与 javascript互访(相互调用)的方法例子
- JavaScript演示排序算法
- javascript实现10进制转为N进制数
- 最后一次说说闭包
- Ajax
- 2019年开发人员应该学习的8个JavaScript框架
- HTML中的script标签研究
- 对一个分号引发的错误研究
- 异步流程控制:7 行代码学会 co 模块
- ES6 走马观花(ECMAScript2015 新特性)
- JavaScript拆分字符串时产生空字符的原因
- Canvas 在高清屏下绘制图片变模糊的解决方法
- Redux系列02:一个炒鸡简单的react+redux例子
- JavaScript 各种遍历方式详解
- call/apply/bind 的理解与实例分享