module.exports和exports.md

推荐写法

具体解释能够日后看。javascript

'use strict'

let app = { // 注册全局对象
    ...
}

... // 封装工具箱

exports = module.exports = app // 导出工具箱

原理

  1. 每个node.js执行文件,都自动建立一个module对象,同时,module对象会建立一个叫exports的属性,初始化的值是 {}。即:module.exports = {}
  2. exports是引用 module.exports的值
  3. 模块导出的时候,真正导出的执行是module.exports,而不是exports

1与2的demo

foo.jsjava

'use strict'
module.exports.sayHello = function(){
    console.log(this.name)
}
exports.name = 'foo.js' // exports引用module.exports的值

test.jsnode

'use strict'

let foo = require('./foo')
foo.sayHello()

3的demo

为了验证真正导出的是module.exports而不是exports,咱们对foo.js修改以下:git

'use strict'

module.exports = {
    sayHello:function(){
        console.log(this.name)
    },
    name:'module.exports'
}

exports.sayHello = function(){
    console.log('exports')
}

test.js的输出就是:module.exportsgithub

由于module.exports的引用改变(js中对象的赋值都是引用),断开了和exports的链接,而真正导出的只是module.exportsapp

欢迎技术交流,引用请注明出处。
我的网站:董沅鑫的我的网站
Github:godbmw工具

相关文章
相关标签/搜索