1

可能重复:
JavaScript“this”关键字

我对EventEmitternode.js 中用于 's的回调有点困惑。

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?回调函数的闭包是这段代码中的全局范围,对吗?

4

2 回答 2

6

this范围与确定来自上下文的值无关。这取决于函数的调用方式。您加载的事件模块将在myobject.

相关代码为:

listener.apply(this, args);

apply方法的第一个参数是用于调用函数 ( listener) 的上下文。您可以从那里追溯到对象。

于 2013-01-13T18:10:36.520 回答
1

这对于大多数节点代码库都是一样的。很久以前有一个关于这个的小讨论,共识是这.call(this)需要太多的开销,而且放在任何地方真的很难看/很烦人。所以换句话说,永远不要假设this是你的想法。

编辑:没关系,EventEmitter 在这种情况下并不特别适用,我完全误解了你的问题。

于 2013-01-13T18:10:41.653 回答