2013-07-26 1 views
0

Tout d'abord je voudrais dire que c'est la première fois que je travaille avec un modèle de réacteur. J'ai essayé un peu de tout avec les connaissances que j'ai, mais sans aucun succès. Ceci est mon script jusqu'à présent:Obtenir le bon objet comme "ceci" dans mon rappel de modèle de réacteur

function Reactor(){ 
    this.events = {}; 
} 

Reactor.prototype.registerEvent = function(eventName){ 
    this.events[eventName] = {name: eventName, callbacks: []}; 
}; 

Reactor.prototype.dispatchEvent = function(eventName, eventArgs){ 
    for(var i in this.events[eventName].callbacks) { 
    this.events[eventName].callbacks[i](eventArgs); 
    } 
}; 

Reactor.prototype.addEventListener = function(eventName, callback){ 
    if(typeof(this.events[eventName]) == 'undefined') this.registerEvent(eventName); 
    return this.events[eventName].callbacks.push(callback) - 1; 
}; 

et de tester le script que j'ai cette

var test = new Reactor(); 

test.addEventListener('ping', function() { 
    console.log(this); //I want this to be the 'test' object 
}); 

test.dispatchEvent('ping'); 

donc créer un nouvel objet de réacteur, ajoute un EventListener, pour ensuite envoyer l'événement. Mais dans la fonction de rappel, je veux que "this" soit l'objet "test".

Répondre

1

Vous pouvez appeler vos méthodes avec call ou apply pour forcer une valeur this particulière:

Reactor.prototype.dispatchEvent = function(eventName, eventArgs){ 
    for(var i in this.events[eventName].callbacks) { 
    this.events[eventName].callbacks[i].apply(this, eventArgs); 
    } 
}; 

(en supposant eventArgs est un tableau, le rappel sera appelé à chaque élément du tableau passé comme séparé argument)

+0

En plus du ")" après le apply() cela fonctionne parfaitement! Merci pour la réponse rapide. Va lire les docs pour apply(), ne savait pas à propos de cette fonction :-) – PeterBechP

+0

Oups, désolé pour le supplément ')'. J'ai réparé cela, et ajouté des liens vers les documents pour appeler et appliquer. Ils diffèrent simplement dans la façon dont ils transmettent des arguments à la fonction que vous appelez. – bfavaretto

Questions connexes