如何创建一个可以在其他模块中编辑而不是全局的变量?

时间:2016-08-24 15:49:03

标签: javascript

我正在开发游戏,我有一个全局save变量,它包含游戏的各个方面(单位,升级等)。游戏代码分为几个模块,例如升级或成就。

如何在其他模块中访问save变量?导入为我提供了变量的只读副本,这是无用的。如何在不使其变为全局的情况下与其他模块共享变量?

我没有找到解决问题的最简单方法,我正在寻找最佳做法。

编辑:我正在使用ES6导入/导出功能。

2 个答案:

答案 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