档案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"
吗?如何解决这个问题?
答案 0 :(得分:0)
您只复制对象的引用以在B.js
中起作用。
修复可能是将(引用)游戏对象包装到另一个对象中,然后在那里修改该引用。
替换A.js
let game = new Game();
例如
let game = { myGame: new Game() }
和B.js
game
game.myGame
(适用时)。
(除此之外,您在game
个函数中使用了本地Game.prototype
变量。再次查看this
。我认为您在这里偏离轨道......)