关于'这'在node.js的回调中

Regarding 'this' in callbacks in node.js

本文关键字:回调 js 关于 node      更新时间:2023-09-26

可能重复:
JavaScript"this"关键字

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

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

相关代码为:

listener.apply(this, args);

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

这与大多数节点代码库相同。很久以前有一次关于这个的小讨论,大家一致认为.call(this)需要太多的开销,放在任何地方都很难看/烦人。换句话说,永远不要以为this就是你所想的。

编辑:无论如何,EventEmitter并没有特别适用于这种情况,我完全误解了你的问题。