关于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并不具体适用于这种情况下,我完全误读你的问题。