导出新对象时"this" nodejs 中的关键字不会更新



我有这个代码在nodejs (commonjs) v14.16.1


module.exports.varOne = 'one'
module.exports = {varTwo: 'two', ...module.exports}
console.log('module', module);
console.log(this, this === module.exports);

,这是运行后的结果

module Module {
id: '.',
path: '...',
exports: { varTwo: 'two', varOne: 'one' },
parent: null,
filename: '...',
loaded: false,
children: [],
paths: [...]
}
{ varOne: 'one' } false

我不明白为什么"this"这里没有更改为新的出口吗?请帮助。

在Javascript中,this的值不会在这样的给定代码上下文中改变。这就是语言本身的工作原理。

你用一个不同的对象替换了给定的exports对象。语言中没有任何内容会导致该赋值改变this的值。this的值仍然指向原来的exports对象。

幸运的是,这在nodejs中不是问题,因为你有多种解决方案。您可以不替换exports对象(只需为现有对象赋值),也可以使用module.exports来引用新对象,而不是this

仅供参考,您将注意到exports变量的相同情况。它仍然会指向原来的exports对象。

最新更新