From f98f56ae0f0cd44baf8770e2215e57e7f2f3c479 Mon Sep 17 00:00:00 2001 From: Evgenia Date: Wed, 17 Apr 2019 20:21:18 +0400 Subject: [PATCH] =?UTF-8?q?=D0=A1=D0=B4=D0=B5=D0=BB=D0=B0=D0=BB=D0=B0=20?= =?UTF-8?q?=D0=B7=D0=B0=D0=B4=D0=B0=D0=BD=D0=B8=D0=B5?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- index.js | 40 +++++++++++++++++++++++++++++++++++----- 1 file changed, 35 insertions(+), 5 deletions(-) diff --git a/index.js b/index.js index 7dca45f..cbc5273 100644 --- a/index.js +++ b/index.js @@ -1,26 +1,56 @@ module.exports = { +sub_ev: {}, // объект, хранящий событие + /** * @param {String} event * @param {Object} subscriber * @param {Function} handler */ - on: function (event, subscriber, handler) { - + on: function (event, subscriber, handler) { + if (subscriber == undefined){ + return this; + } + if (!this.sub_ev.hasOwnProperty(event)){ + this.sub_ev[event] = []; + } + this.sub_ev[event].push({ + subscriber: subscriber, + handler: handler.bind(subscriber) + }); + return this; }, /** * @param {String} event * @param {Object} subscriber */ - off: function (event, subscriber) { - + off: function (event, subscriber) { + if (!this.sub_ev.hasOwnProperty(event)){ + return this; + } + if (subscriber == undefined){ // почему === + delete this.sub_ev[event]; + } + else if (this.sub_ev.hasOwnProperty(event)){ + for (var i = this.sub_ev[event].length - 1; i >= 0; --i){ + if (this.sub_ev[event][i].subscriber === subscriber){ + this.sub_ev[event].splice(i, 1); + } + } + } + return this; }, /** * @param {String} event */ emit: function (event) { - + if (this.sub_ev.hasOwnProperty(event) && this.sub_ev[event].length > 0){ + for (var i = 0; i < this.sub_ev[event].length; i++){ + this.sub_ev[event][i].handler(); + } + } + return this; } };