一文简单弄懂 exports 与 modules.exports 的区别

2 篇文章 0 订阅

首先看一个简单的代码

//创建Obj1对象
let obj1 = {
	num: 123,
	add(x, y) {
		return x + y
	}
} 
//将obj2指向Obj1
let obj2 = obj1 

在上面代码中 obj1 与 obj2 都指向了同一块地址,于是它们可以共享成员变量与方法

console.log(obj2) // {num: 123,add: [Function: add]}

obj2.name = 'ES'
console.log(obj1.name) // 'ES' 

于是,exports 就相当于上述代码中的 obj2,而 module.exports 就相当于 obj1 , 就相当于:

let exports = modules.exports //不准确,意思是如此

于是类比的

我们可以知道:exports 与 modules.exports 是指向同一个地址的,而require(‘XXX’) 便是获取 modules.exports 指向的地址中的内容

上代码

exports.name = 'ES'
modules.exports.num = 123
//require() 获取到的是 {name: 'ES', num = 123} 

这是因为两者都指向同一块地址

exports.name = 'ES'
modules.exports = 123
//require() 获取到的是 123

这是因为 modules.exports 直接赋值改变了,而 require( ) 是获取其中的值,所以获取的就直接是数字 123name 成员变量被覆盖

modules.exports.name = 'ES'
exports = {
	name: 'JS'
}
// require().name 是 ES

这是因为 exports 直接改变的指向,与 modules.exports 断开了连接
当然。你也可以重新连接上

modules.exports.name = 'ES'
exports = {
	name: 'JS'
}
exports = modules.exports
exports.name = 'JS'
// require().name 是 ES
还在不断学习,有错误希望支持,谢谢大家
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值