我想知道是否有人可以帮助我。来自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;
})();
答案 0 :(得分:2)
您的活动中的this
和.each()
回调函数与您定义this
和x
的{{1}}不同。当这些回调函数由Socket.io库和jQuery(分别)调用时,通常会提供这些回调函数中socket
的值。
要解决此问题,您的this
功能应该更像:
listen