Как передать данные в пользовательское событие через прототип EventTarget?

Я следую за этой записью в блоге о создании пользовательских событий с использованием прототипа EventTarget. В моем случае это EventTarget объект должен быть изменен, чтобы вернуть data к onDataEvent слушатель:

o.onDataEvent("foo", function(data){
    var dataRetrieved = data.message; //retrieve data object passed to fire function
    console.log(dataRetrieved); //undefined
    alert("Foo just happened.");
});

Таким образом, я сделал суть на основе этого сообщения в блоге в JSFiddle, где я переопределил EventTarget.fire функция, которая отправляет событие, чтобы принять второй аргумент данных.

А также изменил подпись onDataEvent, чтобы включить параметр данных. Идея здесь заключается в том, что в дополнение к вызову event("foo") Я бы вернул некоторые данные на мероприятие.

Я знаю, что событие называется через listeners[i].call(this, event); Но мне не ясно, как я могу передать данные обратно в .call,

Вопрос:

Как вы можете передать данные в пользовательское событие через прототип EventTarget?

Это суть этого кода: https://jsfiddle.net/hLj7yxw9/8/

Во время отладки я проверил, что событие вызывается с использованием этого шаблона, как вы можете видеть в приведенной выше скрипке.

1 ответ

Решение

Проходить data как listeners[i].call(this, event, data)

Затем в вашем слушателе сделайте:

o.onDataEvent("foo", function(event, data){
    console.log(data);
});

https://jsfiddle.net/hLj7yxw9/9/

Другие вопросы по тегам