繁体   English   中英

运行函数时Node.js设置'this'

[英]Node.js setting 'this' when running a function

我正在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

如果我理解正确,则要使用:

doStuff.call(this);

代替。 在该call函数将调用它被要求的功能,并设置this第一个参数。

请参阅Mozilla MDN上的文档

至于您的回调问题,我可能会想像这样来重组您的代码...

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

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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM