我对node.js中用于EventEmitter
的回调感到有点困惑。
var events = require("events");
function myObject() {
this.name = "Test Object";
this.x = 99;
this.y = 100;
}
myObject.prototype = new events.EventEmitter();
var myobject = new myObject();
myobject.addListener('dbg1', function() {
console.log("this.name = " + this.name); //this.name gives the name not undefined
console.log("myobject.name = " + myobject.name); //so does this
});
myobject.emit('dbg1');
为什么this
在回调中引用了myobject
?回调函数的闭包是这段代码中的全局作用域,我是对的吗?
答案 0 :(得分:6)
范围与确定来自上下文的this
的值无关。这取决于函数的调用方式。您加载的事件模块将在myobject
。
listener.apply(this, args);
the apply
method的第一个参数是用于调用函数(listener
)的上下文。您可以从那里追溯到对象。
答案 1 :(得分:1)
对于大多数节点代码库来说,这是相同的。很久以前就这个问题进行了一次小小的讨论,并且达成的共识是.call(this)
需要太多的开销,而且到处都是非常丑陋/烦人的。换句话说,不要以为this
是你的想法。
编辑:没关系,EventEmitter在这种情况下没有特别适用,我完全误读了你的问题。