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

今天,在网上看到javascript的[].forEach.call()写法,刚看到的时候有点蒙,不是太明白是什么意思!后来到网上查了一下,其实这东西是个简写的写法。如下:

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


[] 就是个数组,而且是用不到的空数组,用来就是为了访问它的数组相关方法。那完整的写法是什么呢?
其实是这样的:

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

很显然,简写更方便。
js中的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。

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容

  • 第5章 引用类型(返回首页) 本章内容 使用对象 创建并操作数组 理解基本的JavaScript类型 使用基本类型...
    大学一百阅读 3,270评论 0 4
  • 黄河九曲至, 浩浩唱昭君。 落雁崖前雪, 秭归故里人。 晚霞红古道, 朝雨浥轻尘。 最喜晴明日, 鸿鹄送好音。
    高湛明阅读 964评论 0 8