首先看一个简单的代码
//创建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( ) 是获取其中的值,所以获取的就直接是数字 123,name 成员变量被覆盖
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