我又回来了。我想到了一些我想在多个文件之类的代码。这样,我需要声明一个对象,该对象可以跟踪所有内容,例如数组,计数变量以及在整个项目中需要访问和编辑的内容。
因此,我有一个文件,用于声明各种对象。我们在树中将此文件称为Constants.js
;
Main.js
Constants.js
Secondary.js
我要在Constants.js
中声明一个对象,然后在主文件中需要该对象。之后,我需要使用全局对象在Secondary.js
中运行一个函数,并在其中进行编辑。问题是,如果我在辅助文件中声明它并对其进行编辑,它将与Main.js
文件中的它不一样(或更新)吗?
好的,我的Constants.js
文件的布局如下所示-
// Constants.js
exports.Tools = {
Stack: [],
Test: "foo",
Track: 0
// ...
};
在Main.js
中,我需要使用以下代码对该对象进行编辑,并编辑其中的内容-
// Main.js
const Constants = require("./Constants.js");
const Tools = Constants.Tools;
Tools.Stack.push("Some stuff");
之后,我想运行一个函数,就像这样-
// Main.js
require("./Secondary.js").run(Tools);
然后,在函数运行后,Tools
对象需要更新Secondary.js:run()
对它的操作。例如-
// Secondary.js
exports.run = function (Tools) {
Tools.Test = "bar";
Tools.Track++;
}
因此,我希望使用Secondary.js
对主文件中的新值进行更新。
在不使用该对象或地图中的函数的情况下,是否有可能发生这种情况?我希望它是一个普通的对象。
非常感谢。 〜Q
答案 0 :(得分:3)
在主文件中声明全局变量 Main.js
global.Tools = {
Stack: [],
Test: "foo",
Track: 0
// ...
};
在Secondary.js中,只需将该变量用作
global.Tools.Stack.push(value)
在Node.js中,全局对象在所有模块中都可用,可以直接使用, 无需导入任何文件。
答案 1 :(得分:0)
好的,我一直在做一些挖掘工作,下面的示例有效-
// Constants.js
exports.Tools = {
Test: "foo",
Stack: []
};
// Secondary.js
exports.run = function (Tools) {
Tools.Test = "bar";
Tools.Stack.push("Second");
}
最后,运行的主文件-
// Main.js
const Constants = require("./Constants.js");
const Tools = Constants.Tools;
Tools.Stack.push("First");
require("./Secondary.js").run(Tools);
console.log(Tools);
/*
Outputs:
{
Test: "bar";
Stack: ['First', 'Second']
}
*/
因此,主文件的对象在通过函数时确实会更新。是否在辅助函数中返回该对象也没有关系。
同样,当您不通过函数传递它时,它也会像这样成功运行-
// Secondary.js
exports.run = function () {
const Tools = require("./Constants.js").Tools;
Tools.Test = "bar";
Tools.Stack.push("Second");
}
我希望我能帮助有这个问题的任何人。 〜Q