Następujące dwa próbki kodu zostały miane do mnie w rozmowie kwalifikacyjnej i nie mogłem udać się, że działa:

//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');

Dlatego, że podane dwa kody nie można zmodyfikować, klasa nazywana Event() powinna działać, aby oba dwa próbki kodu byłyby wysyłane "Hello World". Teraz nie proszę o pełną odpowiedź. Nie jestem taki dobry w klasach EM> i niestandardowe w JavaScript . Znam podstawy, ale nie jest jeszcze w moich rękach, jeśli wiesz, co mam na myśli. Szukałem samouczków, ale potrzebuję kogoś " mądrzejszy ", aby powiedzieć mi, gdzie powinienem zacząć, zapewnić, że niektóre linki do dobrych samouczków na mój problem.

Dzięki!

0
tormex 22 listopad 2013, 14:16

2 odpowiedzi

Najlepsza odpowiedź

Demo http://jsfiddle.net/uaqn9/

Kod:

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');
1
closure 22 listopad 2013, 11:50

.on () służy do wiązania zdarzenia do elementu (-ów). Nie można wiązać zdarzenia na zdarzenie, zobacz Przykładowy kod:

$('div').on('hello', function() {
    console.log('Hello');
    $(this).trigger('world');
}).on('world', function() {
    console.log('World');
}).trigger('hello');
2
A. Wolff 22 listopad 2013, 10:21