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。使用しているような匿名関数では、通常、グローバル名前空間またはwindowWeb 上のオブジェクトです。いずれにせよ、クロージャーを利用して、コンストラクターで変数を使用することをお勧めします。

// 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 に答える