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.js
game
с game.myGame
(где уместно).
(Кроме того, вы используете местный game
переменная внутри Game.prototype
функции. Посмотри на this
снова. Я думаю, что вы сбились с пути здесь...)