javascript - 为什么当 module.exports 被分配一个对象时这是一个空对象?

标签 javascript node.js this

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

我知道 Node.js 中的 this 关键字指的是模块的范围,而不是全局命名空间。当通过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 关键字引用的分配对象?提前致谢!

最佳答案

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

It allows a shortcut, so that module.exports.f = ... can be written more succinctly as exports.f = .... However, be aware that like any variable, if a new value is assigned to exports, it is no longer bound to module.exports: node ref

当您在 module.exports 上添加 key 时,它不会覆盖它

enter image description here

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

enter image description here

关于javascript - 为什么当 module.exports 被分配一个对象时这是一个空对象?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/57027828/

相关文章:

javascript - 如何在 Eclipse 中使用 Phonegap 在移动目录中创建简单的文本文件

javascript - 根据初始浏览器请求将 JWT token 发送到服务器(使用本地存储)

node.js - AngularJS + Socket.IO - 如何更新模型?

node.js - GraphicsMagick/ImageMagick 替换所有非透明像素(如 Photoshop 的颜色叠加)

javascript - 严格模式默认绑定(bind) "this"关键字

Groovy:this.metaClass 与 instance.metaClass

javascript - 该对象的主干问题

javascript - 为什么 '❌' [0] === '❌' 但 '✔️' [0] !== '✔️' ?

javascript - JavaScript 中的数字被视为字符吗?

java - this的返回值,进一步解释