我试图了解有关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
关键字中引用的分配对象?预先感谢!
答案 0 :(得分:1)
exports变量在模块的文件级范围内可用,并在评估模块之前为其分配了module.exports的值。
它允许使用快捷方式,以便可以编写module.exports.f = ... 与exports.f = ...相比更简洁 变量,如果将新值分配给导出,则不再绑定 到module.exports:
node ref
当您在module.exports
上添加密钥时,密钥不会被覆盖
但是,当您分配一个完整的新值module.exports = 'some value'
时,它并不一定是module.exports
,它会用新值盖过exports
,
答案 1 :(得分:1)
最初,this
关键字和module.exports
(以及exports
变量)都引用相同的对象。您可以通过向其添加属性来更改该对象,无论您如何引用该对象。
如果将新对象分配给module.exports
,则仅.exports
属性不引用新对象,而this
仍然引用原始对象。这并不是一个神奇的吸气剂,它总是与module.exports
引用相同的内容。