Node.js设置'这个'运行功能时

时间:2013-04-17 18:48:26

标签: javascript node.js eventemitter

我在Node.js中创建了一个具有导出类函数构造函数的模块。我在该课程中添加了2个原型函数,但我也有一堆独立的函数。

普通函数我在内部用作事件和回调的处理程序。我不想将这些函数作为类原型的一部分公开。

在自由站立功能的链接中,我想引用构建模块的主类,以便我可以发出事件(我使用util.inherits(myclassconsructor, EventEmitter))。但在我的内部函数中this是不正确的。我尝试为名为self的模块创建一个全局变量,并将self = this作为构造函数的第一行。

然后我检查了如果我self.on("message name", function() {console.log("worked")});它确实有效。

然后我去了我的主模块,它构造了有问题的模块并创建了上面的模块并绑定到同一个事件。我没有收到模块外的活动......

模块A

var self;
function A() {
  self = this;
  self.on('message name', function() { console.log('test') }); // Firing
  doStuff();
}
function doStuff() {
  api.callApi(callback);
}
function callback() {
  self.emit('message name');
}

模块B

var a = new A();
a.on('message name', domystuff);  // Not firing
function domystuff() {
  console.log('my stuff');
}

发现这个线程似乎是我遇到的问题,但我无法重现结果。 node.js eventEmitter + http.request

1 个答案:

答案 0 :(得分:2)

如果我理解正确,你想使用:

doStuff.call(this);

代替。 call函数将调用它所调用的函数,并将this设置为第一个参数。

请参阅Mozilla MDN

上的文档

至于你的回调问题,我可能会试图像你这样重构你的代码......

var inst = this;
api.callApi(function(p1,p2,p3) { inst.emit('message name',p1,p2,p3); });

但是有一些更优雅的方法。