当前位置: 代码迷 >> 综合 >> node.js自定义模块中的module.exports
  详细解决方案

node.js自定义模块中的module.exports

热度:92   发布时间:2023-11-25 16:50:03.0

1.node.js的模块作用域

和函数作用域类似,在自定义模块中定义的变量方法等成员,只能在当前模块内访问,这种模块识别的访问机制,叫模块作用域。模块作用域的好处是防止全局变量的污染。

但仍有方法向外暴露自定义模块中的成员,以供外界使用。

2.向外共享模块作用域中的成员

  • CommonJS规定:
    每个模块内部,module变量代表当前模块;
    module变量是一个对象,它的exports属性是对外的接口;
    加载某个模块,其实是加载该模块的module.exports属性,require方法用于加载模块。

相关的几个概念:

  • module
    module:每个.js自定义模块中都有一个module对象,存储了和当前模块有关的信息

  • module.exports
    在自定义模块中,可以使用module.exports对象,把模块中的成员共享出去供外界使用,默认情况下module.exports指向一个空对象;
    外界用require导入自定义模块时,得到的就是module.exports指向的对象

  • exports
    exports对象是简化版,默认情况下它和module.exports指向的是同一个对象

exports和module.exports指向同一个对象

 console.log(exports===module.exports);
//true

自定义模块最终向外共享的依然是module.exports指向的那个对象,以module.exports指向的对象为准

有下列几种情况要注意:

  • 情况1
 exports.name='zs'module.exports={
    sex:'男',age:20}console.log(module.exports);
// 输出module.exports指向的对象,{ sex: '男', age: 20 }
  • 情况2
 module.exports.name='zs'exports={
    sex:'男',age:20}console.log(module.exports);
// 输出{ name: 'zs' }
  • 情况3
 exports.name='zs'module.exports.age=20console.log(module.exports);
// 输出{ name: 'zs', age: 20 }
  • 情况4
 exports={
    name:'zs',sex:'男'}module.exports=exportsmodule.exports.age=20console.log(module.exports);
// 输出{ name: 'zs', sex: '男', age: 20 }

最终向外共享的都会是module.exports指向的对象。

  相关解决方案