Javascript 当module.exports被分配了一个对象时,为什么这是一个空对象?
我试图理解Node.js中关于Javascript 当module.exports被分配了一个对象时,为什么这是一个空对象?,javascript,node.js,this,Javascript,Node.js,This,我试图理解Node.js中关于这个关键字的一个简单概念。我的问题如下: 我知道Node.js中的这个关键字指的是模块的范围,而不是全局名称空间。当通过module.exports定义模块时,this的值应该更改。但是,根据我分配给模块.exports的内容,结果是不同的,这是我不理解的。请查看以下代码块: 1-在第一个示例中,module.exports.nameOfModule分配了一个字符串。而此指包含以下字符串的对象: module.exports.nameOfModule = 'This
这个
关键字的一个简单概念。我的问题如下:
我知道Node.js中的这个
关键字指的是模块的范围,而不是全局名称空间。当通过module.exports
定义模块时,this
的值应该更改。但是,根据我分配给模块.exports的内容,结果是不同的,这是我不理解的。请查看以下代码块:
1-在第一个示例中,module.exports.nameOfModule
分配了一个字符串。而此
指包含以下字符串的对象:
module.exports.nameOfModule = 'This Tutorial Module';
console.log(this);
// > { nameOfModule: 'This Tutorial Module' }
2-在第二个示例中,模块.exports
分配了一个对象。而这个
指的是一个空对象
module.exports = {
nameOfTheModule: 'This tutorial module.',
};
console.log(this);
// > {}
为什么会发生这种情况?为什么在第二个示例中,我看不到此
关键字中引用的指定对象?提前谢谢 exports变量在模块的文件级范围内可用,并在评估模块之前分配module.exports的值
它允许一个快捷方式,因此module.exports.f=。。。可以写
更简洁地说是exports.f=。。。。然而,要知道,就像任何
变量,如果将新值指定给导出,则不再绑定该值
要导出模块,请执行以下操作:
在module.exports
上添加键时,不会覆盖它
但是当您分配一个完整的新值module.exports='some value'
时,它不一定是module.exports
它会用新值覆盖exports
最初,this
关键字和模块.exports
(以及exports
变量)都指向同一对象。无论如何引用该对象,都可以通过向其添加属性来更改该对象
如果将新对象分配给模块.exports
,则仅该.exports
属性不引用新对象,而此
仍引用原始对象。它不是一个神奇的getter,它总是引用与模块相同的东西。导出
此
在给定上下文中不会更改。在您的第二个示例中,this
仍然指原始对象。@您指的是尖头吗?不,我指的是this
符号。一旦某个值在某个执行范围(如模块或被调用函数)中绑定到此
,它就不会更改。