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
不同的对象。