Javascript Nodejs引用模块.exports
我正在尝试在浏览器和nodejs服务器之间共享一些js代码。要做到这一点,我只需使用以下练习: 问题是当我想要导出一个函数而不是一个对象时。在节点中,您可以执行以下操作: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
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,因为在赋值之前,它们都引用同一个对象。赋值后,引用
引用的对象与模块不同。导出