Nodejs EventEmitter – Définir la portée de la fonction d'écoute

J'aimerais que quelque chose comme ça fonctionne:

var Events=require('events'), test=new Events.EventEmitter, scope={ prop:true }; test.on('event',function() { console.log(this.prop===true);//would log true }); test.emit.call(scope,'event'); 

Mais, malheureusement, l'auditeur n'est même pas appelé. Existe-t-il un moyen de le faire avec EventEmitter? Je pourrais Function.bind à l'auditeur, mais j'espère vraiment que EventEmitter a une manière spéciale (ou évidente) de le faire …

Merci pour l'aide!

Non, car this valeur dans l'auditeur est l'objet émetteur d'événement.

Cependant, ce que vous pouvez faire, c'est ceci

 var scope = { ... }; scope._events = test._events; test.emit.call(scope, ...); 

La raison pour laquelle votre gestionnaire d'événement n'a pas été appelé est parce que tous les gestionnaires sont stockés dans ._events donc, si vous copiez. Les ._events sur ceux-ci devraient fonctionner.

Cela ne fonctionnera pas, et l'émission n'a qu'un moyen pratique de passer des paramètres, mais aucun pour configurer this . Il semble que vous devrez faire les choses de reliure vous-même. Cependant, vous pourriez simplement passer comme paramètre:

 test.on('event',function(self) { console.log(self.prop===true);//would log true }); test.emit('event', scope); 

J'ai rencontré cette publication lorsque Google cherchait un paquet dans NPM qui répond à ceci:

 var ScopedEventEmitter = require("scoped-event-emitter"), myScope = {}, emitter = new ScopedEventEmitter(myScope); emitter.on("foo", function() { assert(this === myScope); }); emitter.emit("foo"); 

La divulgation complète, c'est un paquet que j'ai écrit. J'avais besoin pour que je puisse avoir un objet avec une propriété EventEmitter qui émet pour l'objet contenant. La page du paquet NPM: https://www.npmjs.org/package/scoped-event-emitter