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工具

相關文章
相關標籤/搜索