test.jshtml
exports.name = function() { console.log('張三'); };
index.js使用數組
var test= require('./test.js'); test.name(); // '張三'
錯誤用法工具
exports = function() { console.log('張三'); };
這樣至關於給exports對象從新賦值,不能導出,調用模塊不能訪問exports對象及其屬性ui
說明this
Module.exports
而不是exportsModule.exports
設置任何屬性和方法,那麼你的模塊就是exports設置給Module.exports的
屬性
2.1 module.exports與exports使用順序問題spa
test.js .net
module.exports = {name:'張三'}; exports.getName = function(){ console.log('李四') };
index.js使用code
var test = require('./test.js'); console.log(test.name); // 輸出結果 -> 張三 test.getName(); // Uncaught TypeError: test.getName is not a funtion
說明htm
Module.exports
。固然,這有個前提,就是Module.exports
自己不具有任何屬性和方法。
若是
Module.exports
已經具有一些屬性和方法,那麼exports收集來的信息將被忽略
2.2 使用module.exports導出一個類 對象
person.js
module.exports = function(name, age) { this.name = name; this.age = age; this.about = function() { console.log(this.name +' is '+ this.age +' years old'); }; };
index.js 使用
var Person = require('./person.js'); var p1 = new Test('張三', 22); p1.about(); // 張三 is 22 years old
2.3 使用module.exports導出一個數組
test.js
module.exports = ['a', 'b', 'c', 'd', 'e'];
index.js 使用
var test = require('./test.js'); console.log(test[2]); // c
2.4 常見使用方法解釋
exports = module.exports = somethings
等價於
module.exports = somethings
exports = module.exports
說明
module.exports = somethings 是對 module.exports 進行了覆蓋,此時 module.exports 和 exports 的關係斷裂,module.exports 指向了新的內存塊,而 exports 仍是指向原來的內存塊,爲了讓 module.exports 和 exports 仍是指向同一塊內存或者說指向同一個 「對象」,因此咱們就 exports = module.exports 。
exports.xxx
,至關於在導出對象上掛屬性,該屬性對調用模塊直接可見exports =
至關於給exports對象從新賦值,調用模塊不能訪問exports對象及其屬性module.exports
,這樣調用者就是一個類構造器,能夠直接new實例
參考資料
https://www.zhihu.com/question/26621212