首页 > 解决方案 > 当 module.exports 被分配一个对象时,为什么这是一个空对象?

问题描述

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

我知道thisNode.js 中的关键字是指模块的范围,而不是全局命名空间。而当通过 定义模块时module.exports, 的值this应该会改变。但是,根据我分配给module.exports的内容,结果会有所不同,这是我不明白的。请看以下代码块:

1 - 在第一个示例中,module.exports.nameOfModule分配了一个字符串。并this引用包含此字符串的对象:

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

console.log(this);
// > { nameOfModule: 'This Tutorial Module' }

2 - 在第二个示例中,module.exports为 分配了一个对象。并且this确实引用了一个空对象。

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

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

为什么会这样?为什么我this在第二个示例中没有看到关键字中引用的分配对象?提前致谢!

标签: javascriptnode.jsthis

解决方案


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

它允许使用快捷方式,因此 module.exports.f = ... 可以更简洁地写为 export.f = ...。但是,请注意,与任何变量一样,如果为 export 分配一个新值,它是不再绑定到 module.exports: node ref

当您在其上添加密钥时module.exports不会覆盖它

在此处输入图像描述

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

在此处输入图像描述


推荐阅读