Javascript对象:实例变量范围

时间:2013-09-25 21:55:14

标签: javascript jquery oop socket.io scope

我想知道是否有人可以帮助我。来自Java,C ++背景我试图在Javascript中编写一个简洁的OO实现。我在Socket.io中使用以下模式。

在listen函数中,实例变量在第一个警报上正确定义。 x实例变量超出了socket.on事件监听器的范围,并且两个实例变量都超出了JQuery $ .each中的范围

有人可以解释这里发生了什么吗?

var Player = (function () {

this.x  = "";

//Constructor
var Player = function() {
    // connect to the server
    this.x = "somevalue";
    this.socket  = io.connect();

};


Player.prototype = {
    constructor: Player,
    listen: function() {
     alert(this.x + " " + this.socket);           // fine get somevalue & [object, object]
     this.socket.on('event', function(data) {
        alert(this.x + " " + this.socket);        // this.x undefined this.socket [object, object]
        $.each(data, function(index,value) { 
           alert(this.x + " " + this.socket);     // undefined undefined  
        });
     });  
    }

return Player;
})();

1 个答案:

答案 0 :(得分:2)

您的活动中的this.each()回调函数与您定义thisx的{​​{1}}不同。当这些回调函数由Socket.io库和jQuery(分别)调用时,通常会提供这些回调函数中socket的值。

要解决此问题,您的this功能应该更像:

listen