关于node.js中回调中的'this'

时间:2013-01-13 18:07:11

标签: javascript node.js closures

  

可能重复:
  JavaScript “this” keyword

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

2 个答案:

答案 0 :(得分:6)

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

的上下文中调用它

relevant code是:

listener.apply(this, args);

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

答案 1 :(得分:1)

对于大多数节点代码库来说,这是相同的。很久以前就这个问题进行了一次小小的讨论,并且达成的共识是.call(this)需要太多的开销,而且到处都是非常丑陋/烦人的。换句话说,不要以为this是你的想法。

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