Що таке "випромінювач подій"?


76

Переглядаючи веб-сторінку http://microjs.com , я бачу безліч бібліотек, позначених як "випромінювачі подій". Мені подобається думати, що я досить добре обіходжу основи мови Javascript, але я справді не уявляю, що таке "випромінювач подій".

Хтось хоче просвітлити мене? Це звучить цікаво ...

Відповіді:


60

Це викликає подію, яку кожен може послухати. Різні бібліотеки пропонують різні реалізації та для різних цілей, але основна ідея полягає в тому, щоб забезпечити основу для випуску подій та підписки на них.

Приклад з jQuery:

// Subscribe to event.
$('#foo').bind('click', function() {
    alert("Click!");
});

// Emit event.
$('#foo').trigger('click');

Однак у jQuery для випуску події потрібно мати об'єкт DOM і не можна випускати події з довільного об'єкта. Саме тут стає корисним випромінювач подій. Ось декілька псевдокодів для демонстрації нестандартних подій (точно такий же шаблон, як вище):

// Create custom object which "inherits" from emitter. Keyword "extend" is just a pseudo-code.
var myCustomObject = {};
extend(myCustomObject , EventEmitter);

// Subscribe to event.
myCustomObject.on("somethingHappened", function() { 
    alert("something happened!");
});

// Emit event.
myCustomObject.emit("somethingHappened");

12
Ваш останній пункт є неправильним, JQuery робить підтримку користувальницьких подій & декларацій. Приклад: jsfiddle.net/PzRtn
Роб W

@RobW Дякуємо за виправлення. Однак обмеження jQuery полягає в тому, що для випуску подій потрібен об'єкт jQuery / DOM. Це правильно?
Ніахер

Я зафіксував відповідь. Будь ласка, повідомте мене, якщо ви все ще бачите якісь проблеми. Дякую.
niaher

4
jQuery може робити події без елемента DOM, використовуючи $ ({})
Ja͢ck


21

У node.js подія може бути описана просто як рядок із відповідним зворотним викликом. Подія може бути "випущена" (або іншими словами, буде викликаний відповідний зворотний виклик) кілька разів, або ви можете вибрати лише прослуховування вперше, коли її було видано.

Приклад: -

var example_emitter = new (require('events').EventEmitter);
example_emitter.on("test", function () { console.log("test"); });
example_emitter.on("print", function (message) { console.log(message); });
example_emitter.emit("test");
example_emitter.emit("print", "message");
example_emitter.emit("unhandled");

> var example_emitter = new (require('events').EventEmitter);
{}
> example_emitter.on("test", function () { console.log("test"); });
{ _events: { test: [Function] } }
> example_emitter.on("print", function (message) { console.log(message); });
{ _events: { test: [Function], print: [Function] } }
> example_emitter.emit("test");
test //console.log'd
true //return value
> example_emitter.emit("print", "message");
message //console.log'd
true    //return value
> example_emitter.emit("unhandled");
false   //return value

Це демонструє всі основні функціональні можливості EventEmitter. on or addListenerМетод ( в основному метод підписки) дозволяє вибрати подія , щоб спостерігати за і зворотного виклику , яка буде викликана. emitМетод (метод опублікувати), з іншого боку, дозволяє «Emit» подія, яка викликає все зворотні виклики , зареєстровані в подію «вогонь», (додзвонилися).

З джерела Що таке випромінювачі подій?


гарне пояснення статті, яка для мене спочатку не мала повного сенсу
Vass

4

Простий приклад у Node.js:

var EventEmitter = require('events').EventEmitter;
var concert = new EventEmitter;
var singer = 'Coldplay';

concert.on('start', function (singer) {
  console.log(`OMG ${singer}!`);
});

concert.on('finish', function () {
  console.log(`It was the best concert in my life...`);
});

concert.emit('start', singer);
concert.emit('finish');

1

Розглянемо функцію зворотного дзвінка-

function test(int a, function(){
     console.log("I am call-back function");
   }){
    console.log("I am a parent function");
 }

Тепер, коли батьківська функція викликається на події (клацання кнопки або будь-яке підключення тощо), вона спочатку виконує свій код, а потім керування передається функції зворотного виклику. Тепер випромінювач подій - це об’єкт / метод, який ініціює подію, як тільки відбувається якась дія, щоб передати cntrol батьківській функції. Наприклад, Server - це випромінювач подій у програмуванні Node.Js. Він видає подію помилки, як тільки сервер зустрічає помилку, яка передає керування батьківській функції помилки. Сервер випромінює подію з'єднання, як тільки сокет підключається до сервера, ця подія потім запускає батьківську функцію getConnections, яка справді також приймає функцію зворотного виклику як аргумент. Отже, це справді ланцюжок, який запускається в міру того, як щось відбувається за допомогою випромінювача подій, який випускає подію для запуску запущеної функції.

Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.