2

JavaScript で簡単なゲームを実装するコードを書き始めました。基本的な考え方は、dealer.game は、ゲームの現在の状態を保持するオブジェクト (プレーヤー、ハンド、資金など) の束を保持するというものです。次に、これらのオブジェクトを操作するさまざまなメソッドがあります。deal.game インスタンスの複数のインスタンスが存在する可能性があるため、プロトタイプ チェーンを使用することを選択したため、これらのインスタンス間でメソッドを共有する必要がありました。

ワーキングフィドル:

http://jsfiddle.net/BhPrQ/

そしてコード:

dealer = {}

dealer.game = function() {

    this.player = {};

    this.hand = {};

    this.set = {};

    this.funds = {};

    this._drawBoard();

};

dealer.game.prototype._drawBoard = function() {
     //draw board in svg here 
};


dealer.game.prototype.addPlayer = function(name,funds) {
    this.setFunds(name,funds);
    this._drawPlayer(name);
};

dealer.game.prototype._drawPlayer = function(name) {
    this.player[name] = '';
};

dealer.game.prototype._getPlayer = function(name) {
    this.player[name] = '';
};

dealer.game.prototype.setFunds = function(name,funds) {
     this.funds[name] = funds;
};

dealer.game.prototype.removeFunds = function() {

};

dealer.game.prototype.drawFunds = function() {

};




var poker = new dealer.game();
poker.addPlayer("jenny",200);
poker.addPlayer("jack",100);
console.log(poker.player);
console.log(poker.funds);

私がすぐに目にする問題は、プロトタイプチェーンを介してオブジェクトにメソッドを追加するコードのこの最小限のボイラープレートでさえ、面倒になることです。私はプレーヤーに何かをするメソッドをたくさん持っていて、それから資金に何かをするメソッドをたくさん持っています...これが大きくなるにつれて、私は直接リンクされた膨大な量のメソッドになってしまうことがわかります.それらが何をするかという点ですべてが混在しているプロトタイプチェーン。技術的には何も問題がないことはわかっていますが、これを整理するためのより良い方法はありますか? インスタンス化が必要な個別のオブジェクトを検討しました...次のようなもの:

dealer.funds = function() {

};

dealer.funds.prototype.addFunds = function() {

};

しかし、これに伴う問題は、インスタンス化された資金オブジェクトが、player.game に含まれるコア プレーヤー、ハンド、セット、または資金オブジェクトにアクセスできなくなることです。

これを再編成するにはどうすればよいですか?

4

1 に答える 1

0

答えは私の顔を見つめていました。アプリケーションの個別の部分に対して個別のクラスを作成します。

dealer = {};

dealer.game = function() {

    this.player = {};

};


dealer.game.prototype.addPlayer = function(name,funds) {

   //assign the object returned by dealer.player to my game.player object 
   //this way my application always has access to all players that have been created 
   this.player[name] = new dealer.player();
};

dealer.player = function() {
   //do some stuff and then return the object
   return this;
};
于 2013-11-01T13:39:37.490 に答える