BUG экспортированный объект не будет изменен снаружи при изменении

Файл 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 даже после того, как игра закончится, и идентификатор теперь другой, потому что началась новая игра. Не должен заменить game в A.js его тоже замените в B.js? Как исправить ошибку?

1 ответ

Вы копируете только ссылку на ваш объект, чтобы функционировать в B.js,

Исправление может заключаться в том, чтобы обернуть (ссылку на) игровой объект в другой объект, а затем изменить эту ссылку там.

Заменить в A.js

let game = new Game();

например с

let game = { myGame: new Game() }

И в B.jsgame с game.myGame (где уместно).

(Кроме того, вы используете местный game переменная внутри Game.prototype функции. Посмотри на this снова. Я думаю, что вы сбились с пути здесь...)

Другие вопросы по тегам