[英]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.