推薦寫法 具體解釋可以往後看。 原理 1. 每一個 執行文件,都自動創建一個 對象,同時, 對象會創建一個叫 的屬性,初始化的值是 。即: 2. 是引用 的值 3. 模塊導出的時候,真正導出的執行是 ,而不是 1與2的demo 3的demo 為了驗證真正導出的是 而不是 ,我們對 修改如下: 的輸出 ...
推薦寫法
具體解釋可以往後看。
'use strict'
let app = { // 註冊全局對象
...
}
... // 封裝工具箱
exports = module.exports = app // 導出工具箱
原理
- 每一個
node.js
執行文件,都自動創建一個module
對象,同時,module
對象會創建一個叫exports
的屬性,初始化的值是{}
。即:module.exports = {}
exports
是引用module.exports
的值- 模塊導出的時候,真正導出的執行是
module.exports
,而不是exports
1與2的demo
foo.js
'use strict'
module.exports.sayHello = function(){
console.log(this.name)
}
exports.name = 'foo.js' // exports引用module.exports的值
test.js
'use strict'
let foo = require('./foo')
foo.sayHello()
3的demo
為了驗證真正導出的是
module.exports
而不是exports
,我們對foo.js
修改如下:
'use strict'
module.exports = {
sayHello:function(){
console.log(this.name)
},
name:'module.exports'
}
exports.sayHello = function(){
console.log('exports')
}
test.js
的輸出就是:module.exports
。
因為module.exports
的引用改變(js
中對象的賦值都是引用),斷開了和exports
的連接,而真正導出的只是module.exports
。