我已经开始编写一些代码来用 JavaScript 实现一个简单的游戏。基本思想是dealer.game 拥有一堆对象(玩家、手牌、资金等),这些对象保持游戏的当前状态。然后我有各种方法来操纵这些对象。我选择使用原型链,因为可能有多个dealer.game 实例,所以我希望在这些实例之间共享方法。
工作小提琴:
和代码:
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 中的核心 player、hand、set 或资金对象。
我该如何重新组织这个?