Javascript-форум (https://javascript.ru/forum/)
-   Общие вопросы Javascript (https://javascript.ru/forum/misc/)
-   -   Собственные события: как бы вы переписали этот код (https://javascript.ru/forum/misc/55674-sobstvennye-sobytiya-kak-vy-perepisali-ehtot-kod.html)

sexbot 09.05.2015 14:09

Собственные события: как бы вы переписали этот код
 
function Signal() {
  this.handlers = [];
}

Signal.prototype.connect = function (handler) {
  if (this.handlers.indexOf(handler) == -1) {
    this.handlers.push(handler);
  }
};

Signal.prototype.disconnect = function (handler) {
  var index = this.handlers.indexOf(handler);

  if (index == -1) { 
    throw new Error("handler hasn't been connected");
  } else {
    var temp = [];

    for (var i = 0; i < this.handlers.length; ++i) {
      if (i == index) continue;
      temp.push(this.handlers[i]);
    }
    
    this.handlers = temp;
  }
};

Signal.prototype.emit = function () {
  var args = Array.prototype.slice.call(arguments);
  
  for (var i = 0; i < this.handlers.length; ++i) {
    this.handlers[i].apply(null, args);
  }
};

Signal.prototype.clearHandlers = function () {
  this.handlers = [];
};

function notify(user, message) {
  console.log('%s recieved message: %s', user, message);
};

var signal = new Signal();

signal.connect(notify);
signal.emit("John", "PHP is sucks");

Safort 09.05.2015 17:39

Для начала, превратил бы его в гламурный ES6..

sexbot 09.05.2015 23:30

А если по существу? Ну ясно, что там Map можно использовать вместо массива (что сразу делает код несовместимым со всякими ишаками).

Erolast 10.05.2015 08:12

Цитата:

Ну ясно, что там Map можно использовать вместо массива (что сразу делает код несовместимым со всякими ишаками).
Используй babel и все будет прекрасно совместимо. Ну или хотя бы core-js подключай.

Цитата:

PHP is sucks
is - это "есть". Надо просто PHP sucks.

sexbot 10.05.2015 13:48

Цитата:

Сообщение от Erolast (Сообщение 370074)
Используй babel и все будет прекрасно совместимо. Ну или хотя бы core-js подключай.


is - это "есть". Надо просто PHP sucks.

но зачем они?

Erolast 10.05.2015 14:20

Цитата:

но зачем они?
Чтобы все было
Цитата:

прекрасно совместимо
со старыми ишаками.

sexbot 10.05.2015 14:36

Цитата:

Сообщение от Erolast (Сообщение 370103)
Чтобы все было

со старыми ишаками.

но зачем мне лишние 100500 байт ради реализации Map? Вот в моем коде что-нибудь можно более элегантно переписать?

Erolast 10.05.2015 18:19

Для начала, превратить в гламурный ES6.


Часовой пояс GMT +3, время: 09:06.