关于node.jscallback中的'this'

可能重复:
JavaScript“这个”关键字

我对node.js中用于EventEmitter的callback有些困惑。

 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'); 

为什么在callback里面提到myobject ? callback函数的闭包是这段代码中的全局范围,对吗?

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

相关的代码是:

 listener.apply(this, args); 

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

这对于大多数节点代码库都是一样的。 关于这个很早以前有一个小小的讨论,而且共识是这样的。 .call(this)需要太多的开销,而且到处都是丑陋的/讨厌的。 所以换句话说,千万不要以为this就是你的想法。

编辑:无所谓,EventEmitter并不具体适用于这种情况下,我完全误读你的问题。