快速理解javascript中的Array.prototype.forEach

我们都知道document.querySelectorAll()能够获取dom节点,它返回时的并不是一个真正的数组,而是一个伪数组(NodeList),对于NodeList而言,它里面是没有forEach方法的,于是经常见到一下这种写法

var doms = document.querySelectorAll('#dom');
Array.prototype.forEach.call(doms, function(item) {
      console.log(item)
})

这样将Array原型中方法,赋给要循环的NodeList,通过call改变this指向,传入参数。

  • 至于forEach 方法,它可以接受一个函数参数:
[1,2,3].forEach(function(item) {
    console.log(item)
})

从上面可以看出此时在forEach是数组内置函数,this指向的自然是调用的这个数组(当然并不是说传入的函数内部打印this,那里的this指向的是全局window对象),所以赋予一个数组forEach的时候,需要将this指向这个数组(直接找到原型上的forEach赋予数组)

如果不理解call函数的用法,请点击这里