我正在开发游戏,我有一个全局save
变量,它包含游戏的各个方面(单位,升级等)。游戏代码分为几个模块,例如升级或成就。
如何在其他模块中访问save
变量?导入为我提供了变量的只读副本,这是无用的。如何在不使其变为全局的情况下与其他模块共享变量?
我没有找到解决问题的最简单方法,我正在寻找最佳做法。
编辑:我正在使用ES6导入/导出功能。
答案 0 :(得分:3)
导入可能会为您提供变量的只读副本,但导入的对象不是不可变。因此,如果要共享多个模块可以写入的排序状态对象,您可以:
import saveState from './saveState';
saveState = { world: { } }; // Doesn't work
saveState.world = {}; // Does work
......并不是说我提倡这种模式(共享状态导致各种可预测性)。最好有一个带有方法的共享对象,并让该对象保持内部状态。
答案 1 :(得分:1)
如果你正在使用es6,你可以创建一个本地模块变量,只导出实用程序函数来改变原始值。
// save-module.js
let Save = {
score: 0,
room: 'main'
}
export changeRoom(room){
Save.room = room;
}
export addScore(){
Save.score++;
}
export subtractScore(){
Save.score--;
}
export getSaveObject(){
return Save;
}
// other-module.js
import { changeRoom, addScore, subtractScore, getSaveObject } from './save-module';
// Do something here with the fns and it should update the Save variable