4

我的代码有一个小问题。这里是 :

// We are in the constructor of my class
this.socket.emit('getmap', {name: name}, function(data){
    this.mapData = data.map;
    this.load();
});

问题是mapData没有设置属性,实际上this是指命名空间Socket。如何this.mapData通过此功能访问?

对不起我的英语不好......

4

2 回答 2

11

您需要保存对该this对象的引用。回调内部this将引用调用函数的对象。一个常见的模式是这样的:

// We are in the constructor of my class
var self = this;
this.socket.emit('getmap', {name: name}, function(data){
    self.mapData = data.map;
    self.load();
});
于 2013-05-14T21:48:37.643 回答
3

您必须了解 JavaScript 如何确定this. 在像您正在使用的匿名函数中,它通常是window网络上的全局命名空间或对象。无论如何,我只是建议您利用闭包并在构造函数中使用变量。

// We are in the constructor of my class
var _this = this;
this.socket.emit('getmap', {name: name}, function(data){
    _this.mapData = data.map;
    _this.load();
});
于 2013-05-14T21:48:30.533 回答