【问题标题】:JavaScript array.forEach [duplicate]JavaScript array.forEach [重复]
【发布时间】:2013-06-09 20:10:38
【问题描述】:

我正在寻找一个不使用 jQuery 的简单点击事件脚本,并找到了一些有用的代码。有了这个,我创建了我自己的代码变体,它有效,但有一件事我没有得到

[].forEach.call(document.querySelectorAll("a"), function (el) {
    el.addEventListener("click", function (ev) {
        ev.preventDefault();
        this.style.backgroundColor = "grey";
    })
});

此代码抓取网页上的所有<a>元素并添加一个将背景颜色更改为灰色的点击事件。

但是,我不明白为什么 forEach.call() 在数组 [] 为空时执行。

有人能解释一下这是如何工作的吗?

【问题讨论】:

  • 关于性能的几点说明...querySelectorAll() 返回一个活动节点列表,因此每次访问它时都会重新运行查询。在使用 forEach 之前,最好先将其转换为数组。此外,如果您想在点击时设置链接样式,您可以随时在 CSS 中使用 a:active。
  • 链接的样式已经完成,因此我可以在任何页面的 Web 控制台中运行它。
  • @Broxzier 够公平的 :)

标签: javascript


【解决方案1】:

虽然[] 是一个数组,但我们使用的是暴露在该类型上的原型函数forEach

这是使用Array.prototype.forEach.call();的简写

【讨论】:

  • 这解释了很多,谢谢。
【解决方案2】:

function.call() 使用不同的this 运行函数。

您的代码创建一个空数组来获取forEach 方法(最好写Array.prototype.forEach,然后调用call() 在类似数组的NodeList 上调用它。

【讨论】:

  • 感谢您的解释。
猜你喜欢
  • 2015-03-09
  • 2017-10-04
  • 2016-10-11
  • 1970-01-01
  • 1970-01-01
  • 2012-11-16
  • 2017-02-09
  • 2017-02-13
  • 1970-01-01
相关资源
最近更新 更多