嘿伙计们我是JS的新手,基本上知道关于Jquery的事情,所以我正在通过this(Jquery in plain Javascript)文章,他们有以下例子:
$('a').on('click', fn);
在此示例中,我们将click事件侦听器附加到页面上的所有锚标记。
上面的Jquery代码重写如下:
[].forEach.call( document.querySelectorAll('a'), function(el) {
el.addEventListener('click', function() {
// anchor was clicked
}, false);
});
现在我理解了call()在JS中是如何工作的以及forEach在JS中是如何工作的,但是我不明白[]
在forEach
面前做了什么,这很难要了解上述代码中的执行顺序,还要在el
内传递function(el)
?
谢谢。
亚历-Z
答案 0 :(得分:4)
[]
是Array.prototype
的快捷方式,所以它确实是
Array.prototype.forEach.call( document.querySelectorAll('a'), callback );
它接受本机Array.prototype.forEach
并使用querySelectorAll
生成的nodeList作为第一个参数,this
值和回调作为第二个参数调用它。
调用它可以让我们传入非数组,比如“类似数组”的对象,因为它们有一个length属性,例如arguments
或nodeList,否则就不能通过直接在对象上使用Array.forEach
进行迭代。