Javascript 当module.exports被分配了一个对象时,为什么这是一个空对象?

Javascript 当module.exports被分配了一个对象时,为什么这是一个空对象?,javascript,node.js,this,Javascript,Node.js,This,我试图理解Node.js中关于这个关键字的一个简单概念。我的问题如下: 我知道Node.js中的这个关键字指的是模块的范围,而不是全局名称空间。当通过module.exports定义模块时,this的值应该更改。但是,根据我分配给模块.exports的内容,结果是不同的,这是我不理解的。请查看以下代码块: 1-在第一个示例中,module.exports.nameOfModule分配了一个字符串。而此指包含以下字符串的对象: module.exports.nameOfModule = 'This

我试图理解Node.js中关于
这个
关键字的一个简单概念。我的问题如下:

我知道Node.js中的
这个
关键字指的是模块的范围,而不是全局名称空间。当通过
module.exports
定义模块时,
this
的值应该更改。但是,根据我分配给
模块.exports的内容,结果是不同的,这是我不理解的。请查看以下代码块:

1-在第一个示例中,
module.exports.nameOfModule
分配了一个字符串。而
指包含以下字符串的对象:

module.exports.nameOfModule = 'This Tutorial Module';

console.log(this);
// > { nameOfModule: 'This Tutorial Module' }
2-在第二个示例中,
模块.exports
分配了一个对象。而
这个
指的是一个空对象

module.exports = {
  nameOfTheModule: 'This tutorial module.',
};

console.log(this);
// > {}

为什么会发生这种情况?为什么在第二个示例中,我看不到
关键字中引用的指定对象?提前谢谢

exports变量在模块的文件级范围内可用,并在评估模块之前分配module.exports的值

它允许一个快捷方式,因此module.exports.f=。。。可以写 更简洁地说是exports.f=。。。。然而,要知道,就像任何 变量,如果将新值指定给导出,则不再绑定该值 要导出模块,请执行以下操作:

module.exports
上添加键时,不会覆盖它

但是当您分配一个完整的新值
module.exports='some value'
时,它不一定是
module.exports
它会用新值覆盖
exports


最初,
this
关键字和
模块.exports
(以及
exports
变量)都指向同一对象。无论如何引用该对象,都可以通过向其添加属性来更改该对象


如果将新对象分配给
模块.exports
,则仅该
.exports
属性不引用新对象,而
仍引用原始对象。它不是一个神奇的getter,它总是引用与
模块相同的东西。导出

在给定上下文中不会更改。在您的第二个示例中,
this
仍然指原始对象。@您指的是尖头吗?不,我指的是
this
符号。一旦某个值在某个执行范围(如模块或被调用函数)中绑定到此
,它就不会更改。