Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/url/2.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 Nodejs引用模块.exports_Javascript_Node.js_Module_Require - Fatal编程技术网

Javascript Nodejs引用模块.exports

Javascript Nodejs引用模块.exports,javascript,node.js,module,require,Javascript,Node.js,Module,Require,我正在尝试在浏览器和nodejs服务器之间共享一些js代码。要做到这一点,我只需使用以下练习: 问题是当我想要导出一个函数而不是一个对象时。在节点中,您可以执行以下操作: var Constructor = function(){/*code*/}; module.exports = Constructor; 因此,当使用require时,您可以执行以下操作: var Constructor = require('module.js'); var oInstance = new Constru

我正在尝试在浏览器和nodejs服务器之间共享一些js代码。要做到这一点,我只需使用以下练习:

问题是当我想要导出一个函数而不是一个对象时。在节点中,您可以执行以下操作:

var Constructor = function(){/*code*/};
module.exports = Constructor;
因此,当使用require时,您可以执行以下操作:

var Constructor = require('module.js');
var oInstance = new Constructor();
问题是当我尝试引用模块中的module.exports对象并使用该引用用我的函数覆盖它时。在模块中,它将是:

var Constructor = function(){/*code*/};
var reference = module.exports;
reference = Constructor;
为什么这不起作用?我不想使用简单的解决方案在干净的代码中插入if,但我想理解为什么它是非法的,即使reference===module.exports是true


谢谢

它不起作用,因为
参考
没有指向
模块。导出
,它指向对象
模块。导出
指向:

module.exports
              \ 
                -> object
              / 
     reference
module.exports
              \ 
                -> object

reference -> function
将新值指定给
参考
时,只需更改
参考
指向的对象,而不是
模块。导出
指向:

module.exports
              \ 
                -> object
              / 
     reference
module.exports
              \ 
                -> object

reference -> function

以下是简化的示例:

var a = 0;
var b = a;
现在,如果您设置
b=1
,那么
a
的值仍然是
0
,因为您刚刚为
b
分配了一个新值。它对
a
的值没有影响

我想了解为什么它是非法的,即使reference===module.exports是真的

这并不违法,JavaScript(和大多数其他语言)就是这样工作的
reference===module.exports
为true,因为在赋值之前,它们都引用同一个对象。赋值后,
引用
引用的对象与
模块不同。导出