node中的exports如何实现的,它和module.exports有什么关系
exports实现:exports = module.exports = {};就好像是var a = { } var b = a,看上去没有太大区别,但使用起来却又不同module是一个对象,当我们在控制台输入node并执行,在node中执行module或者执行js文件打印module时会发现以下log
Module {
id: '',
path: '.',
exports: {},
parent: undefined,
filename: null,
loaded: false,
children: [],
paths: [
...
]
}`
不难发现,module是Module的实例,exports是其中一个属性,也就是说当你在node中执行一个js文件或者使用
require引入模块时,nodejs都会新建一个var module = new Module(),并执行exports = module.exports,
这也就是为什么直接打印exports和exports时,控制台不会报错,如果在node中执行以下代码,就能清楚的看出
这二者的引用关系了
console.log(module.exports) // {}
console.log(exports) // {}
module.exports.name = '张三'
exports.age = 22
console.log(module.exports) // { name: '张三', age: 22 }
console.log(exports) // { name: '张三', age: 22 }