gpt4 book ai didi

javascript - Nodejs 引用 module.exports

转载 作者:行者123 更新时间:2023-11-30 18:06:53 24 4
gpt4 key购买 nike

我正在尝试做一些在浏览器和 nodejs 服务器之间共享的 js 代码。为此,我只使用这些实践:http://caolanmcmahon.com/posts/writing_for_node_and_the_browser/

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

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 是真的。

谢谢

最佳答案

它不起作用,因为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 的值没有影响。

i want to understand why it is illegal, even though reference===module.exports is true

这不是非法,这就是 JavaScript(和大多数其他语言)的工作方式。 reference === module.exports 为真,因为在赋值之前,它们都引用同一个对象。赋值后,references 引用与 modules.export 不同的对象。

关于javascript - Nodejs 引用 module.exports,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15602562/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com