Nodejs变量无法传递给事件侦听器

时间:2016-09-02 08:18:41

标签: javascript node.js

this.name无法传递给我的函数事件发射器,不知道吗? 我的代码:

function lightwareTx(name,ip){
this.name = name;
This. IP = IP;

this.connect = function(){
    this.client = net.createConnection(10001,this.ip);
    this.reconnectSts = true;

    this.client.on('connect', function(){
        console.log(this.name);
        //undefined
    }
} 
}

2 个答案:

答案 0 :(得分:1)

这是因为this关键字的绑定方式。我强烈建议阅读,例如this article了解这一基本过程的运作方式。在您的情况下,回调中的this很可能绑定到全局范围(在节点环境中为process对象,在Web浏览器中为window,除非您使用strict mode )。

作为快速工作方法,您可以将this附加到变量,稍后再使用。

function lightwareTx(name,ip){
    var self = this;
    this.name = name;
    This. IP = IP;

    this.connect = function(){
         this.client = net.createConnection(10001,this.ip);
         this.reconnectSts = true;

         this.client.on('connect', function(){
             console.log(self.name);
             //name
         });
    } 
}

答案 1 :(得分:1)

那是因为this指向另一个上下文。你有两个选择:

  • var self = this;添加到connect函数,然后调用console.log(self.name);
  • 以这种方式使用bind - 因此您可以更改上下文:

    this.client.on('connect', function(){ console.log(this.name); }.bind(this))