修改后,BUG导出的对象不会在外部更改

时间:2017-06-22 19:05:50

标签: javascript node.js modular-design

档案A.js

function Game() {
this.id = Math.random();
this.endTimeout = setTimeout(() => {
    this.end(this);
    return
}, this.duration * 60 * 1000);
}
Game.prototype.addPlayer = function(game, player, items) {
        console.log('addPlayer to game.id ' + game.id)
        if (game.totalItemAmount >= 50) {
            clearTimeout(game.endTimeout)
            game.end(game);
        }
        return
    }
Game.prototype.end = function(game) {
game = new Game();
}

let game = new Game();
require('../../tests/B.js')(game)   

档案B.js

  module.exports = function (game) { 

    let test = setInterval(() => {
    for (var i = 0; i < 10; i++) {
           game.addPlayer(game, {
                playerID: '2134' + i,
                nickname: "player" + i

            },
    }, 4000);

假设第一个随机game.id是2389423942,addPlayer方法将继续将玩家添加到2389423942,即使游戏结束后,由于新游戏已启动,因此ID现在是另一个。 不应该替换A.j中的game替换B.js中的log_type = "1"吗?如何解决这个问题?

1 个答案:

答案 0 :(得分:0)

您只复制对象的引用以在B.js中起作用。

修复可能是将(引用)游戏对象包装到另一个对象中,然后在那里修改该引用。

替换A.js

let game = new Game();

例如

let game = { myGame: new Game() }

B.js game game.myGame(适用时)。

(除此之外,您在game个函数中使用了本地Game.prototype变量。再次查看this。我认为您在这里偏离轨道......)