在回调函数中访问类属性

时间:2013-05-14 21:43:11

标签: javascript

我的代码中遇到了一些问题。这是:

// 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

抱歉我的英语不好......

2 个答案:

答案 0 :(得分:10)

您需要保存对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();
});

答案 1 :(得分:3)

您必须了解JavaScript如何确定this的值。在您正在使用的匿名函数中,它通常是Web上的全局命名空间或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();
});