2011-01-28 19 views
2

私が作成しているゲームにマルチプレイヤー拡張機能を実装しようとしています。 XMLHttpRequestの後に、ゲームID、すなわちマルチプレイヤーセッションのIDが返される。 this.gameID = parseInt(text)を使用することができないようなので、機能を使用しているオブジェクトのメンバーを設定できません

var Multiplayer = { 
    baseURL: 'http://127.0.0.1:8888/m', 
    gameID: -1, 

    create: 
    function() { 
     $.get(this.baseURL, {'a':'c'}, function(text) { 
      this.gameID = parseInt(text); 
     }); 
    } 
} 

それは失敗します。

私はマルチプレイが静的クラスである以下のコードを、使用しています。私がMultiplayer.gameID = parseInt(text)に変更すると、それは魅力のように機能します。

Multiplayer.gameIDは、書き込みと書き込みの両方が可能ですが、this.gameIDは未定義です。

これが正しいのですか?もしそうなら、なぜこの場合ですか?

答えて

2

Javascriptにはクラスがなく、thisは、C++またはJavaのバックグラウンドからの期待通りに動作しません。これにあなたの作成機能を変更してみてください:

function() { 
    var that = this; 
    $.get(this.baseURL, {'a':'c'}, function(text) { 
     that.gameID = parseInt(text); 
    }); 
} 

のキーポイントは、すべての関数は()特定のthis値で呼び出されていることであり、それが囲んで、関数のと同じ値ではないかもしれません。

+0

私は 'console.log(this)'を使用しましたが、Multiplyerオブジェクトを返さず、代わりにJQuery AJAXクラスを返しました。ソリューションに感謝します。 – pimvdb

関連する問題