有没有办法在 JavaScript 中跨文件创建全局对象?

QSm*_*lly 2 javascript node.js

我又回来了。我想到了一些我想在多个文件之间拆分的代码等等。有了这个,我需要一个声明的对象来跟踪所有的东西,比如数组、计数变量,以及我需要在整个项目中访问和编辑的东西。

所以,我有一个文件,我在其中声明了各种对象。让我们Constants.js在树中调用这个文件;

Main.js
Constants.js
Secondary.js
Run Code Online (Sandbox Code Playgroud)

我在 中声明了一个对象Constants.js,然后我需要在主文件中使用该对象。之后,我需要运行一个Secondary.js使用全局对象的函数并在那里编辑它。问题是,如果我在辅助文件中声明并编辑它,它在Main.js文件中不会相同(或更新),是吗?

好的,我的Constants.js文件如下所示 -

Main.js
Constants.js
Secondary.js
Run Code Online (Sandbox Code Playgroud)

Main.js我要求使用以下代码的对象中,并编辑其中的内容 -

// Constants.js
exports.Tools = {
  Stack: [],
  Test: "foo",
  Track: 0
  // ...
};
Run Code Online (Sandbox Code Playgroud)

在那之后,我想运行一个函数,就像这样 -

// Main.js
const Constants = require("./Constants.js");
const Tools     = Constants.Tools;

Tools.Stack.push("Some stuff");
Run Code Online (Sandbox Code Playgroud)

然后在函数运行后,Tools对象需要更新Secondary.js:run()它所做的事情。例如 -

// Main.js
require("./Secondary.js").run(Tools);
Run Code Online (Sandbox Code Playgroud)

因此,我希望主文件中的对象使用对其执行的新值进行更新Secondary.js

如果不使用该对象或地图中的函数,是否有可能发生这种情况?我希望它是一个普通的对象。

非常感谢。~Q

Kru*_*ate 6

在主文件 Main.js 中声明全局变量

 global.Tools = {
  Stack: [],
  Test: "foo",
  Track: 0
  // ...
};
Run Code Online (Sandbox Code Playgroud)

在 Secondary.js 中只需将该变量用作

global.Tools.Stack.push(value)
Run Code Online (Sandbox Code Playgroud)

在 Node.js 中,全局对象在所有模块中都可用,可以直接使用,无需导入任何文件。