Настраиваемое событие в классе

Следующие два примера кода были даны мне на собеседовании, и мне не удалось заставить его работать:

//CODE1:
var e = new Event();

e.on('myevent', function (a, b) {
    console.log(a + ' ' + b);
});

e.trigger('myevent', ['Hello', 'world']);


//CODE2:  
e.on('hello', function() {
    console.log('Hello');
    this.trigger('world');
}).on('world', function() {
    console.log('World');
}).trigger('hello');

Таким образом, данные два кода не могут быть изменены, класс называется Event() должен работать так, чтобы оба примера кода выводили "Hello world". Теперь я не прошу полного ответа. Я не очень хорош в классах и пользовательских мероприятиях в Javascript. Я знаю основы, но это еще не в моих руках, если Вы понимаете, о чем я. Я искал учебники, но мне нужен кто-то "умнее", чтобы сказать мне, с чего мне начать, и, возможно, предоставить ссылки на хорошие учебники по моей проблеме.

Спасибо!

2 ответа

Решение

Демо http://jsfiddle.net/uAQn9/

Код:

function Event() {

}

Event.prototype = {

  trigger:function(eventName, arParam) {
    $(window).trigger(eventName, arParam);
  },

  on: function(eventName, cb) {
    var event = this;
    $(window).on(eventName, function(e) {
      var args = Array.prototype.slice.call(arguments);
      cb.apply(event, args.slice(1));
    });
    return this;
  }
}

//CODE1:
var e = new Event();

e.on('myevent', function (a, b) {
    console.log(a + ' ' + b);
});

e.trigger('myevent', ['Hello', 'world']);


//CODE2:  
e.on('hello', function() {
    console.log('Hello');
    this.trigger('world');
}).on('world', function() {
    console.log('World');
}).trigger('hello');

.on() используется для привязки события к элементу (ам). Вы не можете привязать событие к событию, см. Пример кода:

$('div').on('hello', function() {
    console.log('Hello');
    $(this).trigger('world');
}).on('world', function() {
    console.log('World');
}).trigger('hello');
Другие вопросы по тегам