【发布时间】:2019-04-02 14:32:42
【问题描述】:
在 Node JS 应用程序的模块之间传递对象时,我得到了不一致的结果,或者可能只是误解了正在发生的事情!
在我的应用程序中,用下面的伪代码编写,首先需要一个 lib 文件到应用程序根目录中,然后是应用程序使用的其他服务,这些服务也需要在同一个库中。然后在应用程序根目录中配置库 - 这会设置一个类变量 (this.foo),该变量在库中初始化为空对象 - 最后调用其中一个服务中的方法。
foo 属性在服务文件的顶部被解构,如果我立即将其注销,我会得到一个空对象(如预期的那样)。当我调用服务方法时,在其他地方配置了 foo 并引用解构的属性后,我仍然得到一个空对象。相反,如果我不解构该属性而只需要在库中 (Lib),那么在我访问 Lib.foo 的方法中,我会看到配置的值(即如预期的那样)。
我怀疑解构变量是一个没有被更新的值,而所需的库是一个引用,但我读过的所有内容都表明没有任何内容是按值传递的。任何指针将不胜感激!
// main.js
// ========
const lib = require('./lib');
const service = require('./service');
lib.configure({ foo: "bar"});
service.run();
// service.js
// ========
const Lib = require('./lib'); // This is for the example only
const { foo } = require('./lib'); // I'd prefer to just do this
console.log(Lib.foo); // {} as expected
console.log(foo); // {} as expected
class Service {
run() {
console.log(foo); // {} - should be "bar"
console.log(Lib.foo) // "bar" as expected
}
}
module.exports = new Service();
// lib.js
// ======
class Lib {
constructor() {
this.foo = {};
}
configure({ foo }) {
this.foo = foo;
}
}
module.exports = new Lib();
【问题讨论】:
标签: javascript node.js pass-by-reference es6-modules destructuring