Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/node.js/34.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 node js中的module.exports是否创建导出对象或函数的浅拷贝或深拷贝?_Javascript_Node.js_Import_Deep Copy_Shallow Copy - Fatal编程技术网

Javascript node js中的module.exports是否创建导出对象或函数的浅拷贝或深拷贝?

Javascript node js中的module.exports是否创建导出对象或函数的浅拷贝或深拷贝?,javascript,node.js,import,deep-copy,shallow-copy,Javascript,Node.js,Import,Deep Copy,Shallow Copy,比如说, 如果我有两个模块try1.js和try2.js try1.js module.exports.msg = "hello world"; try2.js try1 = require('./try1'); try1.msg = "changed message"; try2.js中msg内容的更改是否影响try1.js中msg的try值?完全没有复制模块。导出是一个对象,该对象直接共享。如果修改该对象的属性,则所有加载该模块的用户都将看到这些更改 try2.js中m

比如说,

如果我有两个模块try1.js和try2.js

try1.js
   module.exports.msg = "hello world";

try2.js
   try1 = require('./try1');
   try1.msg = "changed message";

try2.js中msg内容的更改是否影响try1.js中msg的try值?

完全没有复制<代码>模块。导出是一个对象,该对象直接共享。如果修改该对象的属性,则所有加载该模块的用户都将看到这些更改

try2.js中msg内容的更改是否会影响try1.js中msg的try值

是的。没有副本。导出对象直接共享。使用该模块的所有人都将看到您对该导出对象所做的任何更改


仅供参考,模块可以使用
Object.freeze(module.exports)
来防止在添加所需属性后对该对象进行更改。

是的,它会影响该对象。尝试执行以下操作。将此代码保存到文件m1.js:

module.exports.msg = 'hello world';

module.exports.prn = function() {
    console.log( module.exports.msg );
}
然后运行节点控制台并尝试以下操作:

> const m1 = require('./m1')
undefined
> m1.prn()
xxx
> m1.msg = 'changed'
'changed'
> m1.prn()
changed

@UllasKashyap-因为看起来你在这里可能有点陌生,如果这回答了你的问题,那么你可以通过单击对你帮助最大的答案旁边的绿色复选标记向社区表明这一点。这也将为您赢得一些堆栈溢出的信誉点,以遵循正确的过程。