forum.boolean.name

forum.boolean.name (http://forum.boolean.name/index.php)
-   JavaScript / HTML (http://forum.boolean.name/forumdisplay.php?f=136)
-   -   events (http://forum.boolean.name/showthread.php?t=17875)

moka 13.02.2013 16:41

events
 
Ссылка: 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 есть также отличные события, и работа с ними порой удобнее.

Но что если нужно работать со своими функциями и событиями, писать постоянно:
Код:

$(this).trigger('hit');
И затем:
Код:

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 кодеров, но те что есть, что думаете?


Часовой пояс GMT +4, время: 19:20.

vBulletin® Version 3.6.5.
Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
Перевод: zCarot