我有这个代码在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对象。