Ссылка: https://github.com/dude-seriously/be...t/js/events.js
JS достаточно динамичный и учитывая что это однопоточный процесс с внутренней очередью задач.
События - очень популярная парадигма в программировании, и JS тут очень хорошо справляется с этими задачами.
В jQuery есть куча helper'ов для работы с событиями, включая стандартные DOM, например:
$('.button').click(function() {
// ...
});
$('.button').bind('click', function() {
// ...
});
Кстати вот эти две записи идентичны. Та что выше - shorthand для очень популярного имени события.
В Node.js есть также отличные события, и работа с ними порой удобнее.
Но что если нужно работать со своими функциями и событиями, писать постоянно:
И затем:
var player = new Player(...);
$(player).bind('hit', function() {
// ...
});
Немного не читабельно, т.к. постоянно эти $(), а ещё Node.js использует более интуитивные имена для работы с событиями: emit, on, once.
Я решил написать простой и мелкий код по событиям, а также и глобальным событиям.
Код тут: https://github.com/dude-seriously/beat-em-up/blob/master/client/js/events.js
Используется очень просто.
Для глобальных событий:
events.emit('player:create', player);
И для подписки:
events.on('player:create', function(player) {
// ...
});
Присоединение событий к функции (классу) очень эффективно и не бъёт по памяти при создании каждого экземпляра класса:
function Player() {
events.add(this);
this.x = 0;
this.y = 0;
events.emit('player:create', this);
}
events.implement(Player);
Вот определение класса Player, с присоединением событий к классу.
events.add(this); - создаёт переменную событий (this.events).
events.implement(Player); - назначает prototype функции к самому классу а не функции к экземпляру, что сильно улучшает производительность работы с созданием экземпляра и доступа к методам, по сравнению если бы создавались функции индивидуально к каждому экземпляру, как это делается в большинстве библиотек событий.
Знаю что тут мало JS кодеров, но те что есть, что думаете?