javascript - 当 module.exports 被分配一个对象时,为什么这是一个空对象?
问题描述
我试图理解一个关于this
Node.js 中关键字的简单概念。我的问题如下:
我知道this
Node.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
在第二个示例中没有看到关键字中引用的分配对象?提前致谢!
解决方案
export 变量在模块的文件级范围内可用,并在评估模块之前分配了 module.exports 的值。
它允许使用快捷方式,因此 module.exports.f = ... 可以更简洁地写为 export.f = ...。但是,请注意,与任何变量一样,如果为 export 分配一个新值,它是不再绑定到 module.exports:
node ref
当您在其上添加密钥时module.exports
不会覆盖它
但是,当您分配一个完整的新值module.exports = 'some value'
时,它不一定会被新值module.exports
所掩盖exports
,
推荐阅读
- express - 如何从 Express 服务器后端调用 GraphQL 查询/突变?
- javascript - 将 props 作为参数传递给 compose 中的另一个 HoC
- java - 使用 Java 比较器按另一个列表对对象列表进行排序
- xamarin - 日期时间上的 xamarin SetAlarm
- settings - 点火 4 列 展开
- php - 关于 CURL 中 URL 设置的 PHP 查询
- json - 如何在swift 4中将JSON字典转换为字符串值
- javascript - 如何使用 javascript/jquery 在 span 标签之间获取值
- couchbase - 沙发底座内部
- javascript - Add sails route path to default URL