Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- var emitter = {
- // Свойство в котором хранятся все события.
- subscriptions: {},
- // Подписывает на событие. На любое событие подписчик может
- // подписаться неограниченное количество раз.
- on: function (event, subscriber, handler) {
- if (!this.subscriptions.hasOwnProperty(event)) {
- this.subscriptions[event] = [];
- }
- this.subscriptions[event].push({
- subscriber: subscriber,
- handler: handler
- });
- return this;
- },
- // Отписывает от события подписчика. После отписки, при возникновении
- // данного события, никаких обработчиков, связанных с этим подписчиком,
- // не должно быть вызвано. Есть возможность повторно подписаться и снова
- //получать события.
- off: function (event, subscriber) {
- if (this.subscriptions.hasOwnProperty(event)) {
- delete this.subscriptions[event]
- }
- return this;
- },
- //Оповещение всех подписчиков (не отписавшихся). Вызывает все функции-
- //обработчики в порядке подписки.
- emit: function (event) {
- for (let i = 0; i < this.subscriptions[event].length; i++) {
- this.subscriptions[event][i].handler();
- }
- return this;
- }
- };
- // Определим объект для счетчика нотификаций
- var notifications = {
- counter: 0,
- count: function () {
- this.counter++;
- }
- };
- // Определим объект для хранения логов
- var logger = {
- logs: []
- };
- emitter
- .on('new_notification', notifications, notifications.count)
- .on('new_notification', logger, function () {
- this.logs.push('Произошло новое событие new_notification');
- })
- .on('new_notification', logger, function () {
- // this указывает на logger
- this.logs.push('Добавлено. Количество - ' + notifications.counter);
- })
- .emit('new_notification');
- this.subscriptions[event].push({
- subscriber: subscriber,
- handler: handler.bind(subscriber)
- });
Add Comment
Please, Sign In to add comment