Nodejs引用module.exports

我试图做一些浏览器和nodejs服务器之间共享的js代码。 要做到这一点,我只是使用这些做法: http : //caolanmcmahon.com/posts/writing_for_node_and_the_browser/

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

var Constructor = function(){/*code*/}; module.exports = Constructor; 

这样当需求被使用时你可以这样做:

 var Constructor = require('module.js'); var oInstance = new Constructor(); 

问题是当我尝试引用模块中的module.exports对象,并使用该引用来覆盖它与我的function。 在模块中它将是:

 var Constructor = function(){/*code*/}; var reference = module.exports; reference = Constructor; 

为什么这不起作用? 我不想使用简单的解决scheme插入干净的代码,但我想明白为什么它是非法的,即使引用=== module.exports是真实的。

谢谢

它不工作,因为reference不指向module.exports ,它指向的对象module.exports指向:

 module.exports \ -> object / reference 

当您为reference指定新值时,只需更改reference点即可,而不是module.exports指向的内容:

 module.exports \ -> object reference -> function 

这里是简化的例子:

 var a = 0; var b = a; 

现在,如果你设置b = 1 ,那么a的值仍然是0 ,因为你给b赋了一个新的值。 它对a的价值没有影响。

我想明白为什么它是非法的,即使引用=== module.exports是真实的

JavaScript(以及其他大多数语言)如何工作并不违法reference === module.exports是真的,因为在赋值之前,它们都引用同一个对象。 赋值之后, references引用与modules.export不同的对象。