Как этот параметр используется для того, чтобы функция «знала», что она должна реагировать на то, что происходит во второй функции? - PullRequest
0 голосов
/ 26 мая 2018

Следующий код на самом деле работает, но я не понимаю, почему.Почему, когда я передаю параметр «event» в функцию zaehle (), функция фактически «знает», что она должна реагировать на то, что происходит в функции настройки?

Я просто не могупосмотрите, что соединяет функции zaehle () и setup () или как будет задействован параметр, который я передаю zaehle ().

Я надеюсь, что смогу прояснить вопрос.Если нет, я с удовольствием постараюсь объяснить это как-нибудь еще.Это действительно беспокоит меня, и я чувствую, что не могу продолжать учебу, пока не получу его.

<body>

<div id="eins">0</div>
<div id="zwei">0</div>
<div id="drei">0</div>
<div id="vier">0</div>
<div id="funf">0</div>

</body>

JS

var mouseoverZaehler = 0;

function zaehle(event) {
    mouseoverZaehler++;
    event.target.innerHTML = mouseoverZaehler;
}

function setup() {
    document.getElementById("eins").addEventListener("mouseover", zaehle);
    document.getElementById("zwei").addEventListener("mouseover", zaehle);
    document.getElementById("drei").addEventListener("mouseover", zaehle);
    document.getElementById("vier").addEventListener("mouseover", zaehle);
    document.getElementById("funf").addEventListener("mouseover", zaehle);
}

window.addEventListener("load", setup);

Ответы [ 3 ]

0 голосов
/ 26 мая 2018

Вызовы addEventListener в вашей функции setup сообщают браузеру, что, когда на соответствующем элементе происходит событие mouseover, он должен вызывать функцию, которую вы ему даете (в вашем случае zaehle).Это браузер , который передает аргумент в zaehle, позже, при его вызове.

Вы могли бы представить addEventListener, концептуально , в качестве функции-обработчикав списке для события на элементе:

// VERY conceptual, leaves out a lot of details
function addEventListener(eventName, handler) {
    this.events[eventName].handlers.push(handler);
}

... и затем позже, когда событие происходит, браузер создает объект события и вызывает эти обработчики:

// Again, VERY conceptual, leaves out a lot of details
var event = /*...*/;
element.events[eventName].handlers.forEach(function(handler) {
    handler.call(element, event);
});

Вот рабочий аналог того, что происходит:

function FakeElement () {
    this.events = Object.create(null);
}
FakeElement.prototype.addEventListener = function(eventName, handler) {
    var eventEntry = this.events[eventName];
    if (!eventEntry) {
        eventEntry = this.events[eventName] = {
            handlers: []
        };
    }
    eventEntry.handlers.push(handler);
};
FakeElement.prototype.trigger = function(eventName) {
    var event = {type: eventName};                    // "Browser" creates the event
    var eventEntry = this.events[eventName];
    var handlers = eventEntry && eventEntry.handlers;
    if (handlers) {
        handlers.forEach(function(handler) {
            handler.call(this, event);                // "Browser" calls handler, passing
        });                                           // the event into it
    }
};

// Using it:
function zaehle(event) {
  console.log("zaehle got event: " + event.type);
}

var e = new FakeElement();
e.addEventListener("mouseover", zaehle);
console.log("added handler for mouseover to element");

// Simulate the event occurring
var timer = setInterval(function() {
  e.trigger("mouseover");
}, 500);
setTimeout(function() {
  clearInterval(timer);
}, 3000);
0 голосов
/ 26 мая 2018

Вы зарегистрировали свой обратный вызов / функцию zaehle() для события mouseover.Поэтому, когда это событие происходит для определенного элемента div, браузер вызывает функцию обратного вызова с event объектом, который содержит информацию о событии и цели, т.е. событие, с которым произошло событие.

0 голосов
/ 26 мая 2018

Вот что происходит шаг за шагом:

  1. Загрузка страниц
  2. setup вызывается функция (из-за window.addEventListener("load", setup))
  3. Каждый элемент вФункция установки получает прослушиватель события mouseover, подключенный к нему, и когда он запускает, вызывается функция zaehle (из-за document.getElementById("number").addEventListener("mouseover", zaehle))
  4. . Наведите курсор на любой из элементов
  5. * 1016.* вызывается функция - mouseoverZaehler увеличивается и innerHTML целевого элемента устанавливается в обновленное значение mouseoverZaehler

Проверьте addEventListener docs для получения дополнительной информации.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...