2013-06-13 2 views
0

Я искал простой скрипт событий без использования jQuery и нашел полезный код. С этим я создал свой собственный вариант этого кода, который работает, но есть одна вещь, которую я не получаюJavaScript array.forEach

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

Этот код захватывает все <a> -элементов на веб-странице и добавляет событие клика, которая меняет фон цвет до серого.

Однако, я не понимаю, почему forEach.call() выполняется, а массив [] пуст.

Не могли бы вы объяснить, как это работает?

+1

всего пару заметок о производительности ... querySelectorAll() возвращает список узлов живой, поэтому он вновь запускает запрос каждый раз, когда вы получите доступ к нему. лучше преобразовать его в массив сначала, прежде чем использовать forEach. Кроме того, если вы хотите создавать ссылки на клик, вы всегда можете просто использовать: active в CSS. –

+0

Стилирование ссылок было выполнено, чтобы я мог запускать его в веб-консоли на любой странице. – Broxzier

+0

@Broxzier Fair достаточно :) –

ответ

3

function.call() выполняет функцию с другим this.

Ваш код создает пустой массив, чтобы получить в методе forEach (было бы лучше написать Array.prototype.forEach, затем вызывает call() вызвать его на массив типа NodeList.

+0

Благодарим вас за объяснение. – Broxzier

2

Хотя [] является массивом, мы» повторно с помощью функции прототипа forEach воздействию на этом типе.

Это является сокращенным для использования Array.prototype.forEach.call();

+0

Это объясняет многое, спасибо. – Broxzier

Смежные вопросы