Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/node.js/39.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 本模块如何知道其他模块中的数据?_Javascript_Node.js - Fatal编程技术网

Javascript 本模块如何知道其他模块中的数据?

Javascript 本模块如何知道其他模块中的数据?,javascript,node.js,Javascript,Node.js,我对模块的理解是它们彼此不同。然而,我不明白为什么这段代码可以工作 假设node.js框架中有三个文件。一个“app.js”驱动程序文件和两个模块: 模块“one.js”只是有一个名为“name”的属性: 模块“two.js”加载模块“one.js”,并声明一个函数,用于打印“one.js”模块中属性“name”的内容: 现在驱动程序(app.js)导入两个模块,设置第一个模块的属性,然后调用第二个模块的名称打印功能: var one = require("./one"); var two =

我对模块的理解是它们彼此不同。然而,我不明白为什么这段代码可以工作

假设node.js框架中有三个文件。一个“app.js”驱动程序文件和两个模块:

模块“one.js”只是有一个名为“name”的属性:

模块“two.js”加载模块“one.js”,并声明一个函数,用于打印“one.js”模块中属性“name”的内容:

现在驱动程序(app.js)导入两个模块,设置第一个模块的属性,然后调用第二个模块的名称打印功能:

var one = require("./one");
var two = require("./two");

two.printname();

one.name = "John";

two.printname();
当我运行它时,它会打印“null”(很好,它应该是空的),然后是“John”(不好)。第二个模块如何学习第一个模块中的值


我的想法是:当“two.js”加载自己版本的“one.js”时,属性“name”应该始终为空。为什么不是这样?

因为您正在修改
对象的属性,并且对象是通过引用传递的,因此导入
one.js
的所有实例都具有相同的实例

如果需要不同的实例,则应导出
,并根据需要创建实例

诸如此类:

//one.js
class Data {
   constructor(data) {
      this.data = data;
   }
}
export.module = Data;

//two.js
const Data = require('./one');
const data = new Data('John');

因为您正在修改
对象的属性,并且对象是通过引用传递的,因此导入
one.js
的所有实例都得到了相同的实例

如果需要不同的实例,则应导出
,并根据需要创建实例

诸如此类:

//one.js
class Data {
   constructor(data) {
      this.data = data;
   }
}
export.module = Data;

//two.js
const Data = require('./one');
const data = new Data('John');

one
的导出是一个静态对象。它不是每次都是新的

您可以这样更改它:

module.exports = function() {
  return { name: null }
}
然后:


one
的导出是一个静态对象。它不是每次都是新的

您可以这样更改它:

module.exports = function() {
  return { name: null }
}
然后:

var one = require("./one");

var willAlwaysBeNew = one();
willAlwaysBeNew.name = "john"

var willAlwaysBeNewToo = one();

console.log(willAlwaysBeNew.name) // john
console.log(willAlwaysBeNewToo.name) // null