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 }

发表评论

后才能评论