首頁 >web前端 >js教程 >導出和 module.exports

導出和 module.exports

伊谢尔伦
伊谢尔伦原創
2016-11-21 13:20:561022瀏覽

雖然暫時工作上沒有用到commonJS的模組化寫法,但是還是經常看到這種寫法的源碼或者文章,有時候看到exports和module.exports就有點兒傻傻分不清楚了。 。 。我想初學者可能會跟我一樣的疑問吧,結果一查還真是一大把。 。看了幾篇文章,其中stackoverflow上有個哥們寫的很好,故記錄在此。

  其實記住和理解這張圖就很容易區分了:


  這個圖展示了兩者的關係,為了方便理解,我覺得可以這麼來解釋,當一個js檔案需要模組化的時候,node環境中會給文件注入exports和module.exports這兩個變量,並且剛開始的時候這兩個變量是指向同一個空對象的,隨後你拿著這兩個變量做了一系列操作後,注意這是關鍵: 只有module.exports會被回傳以便後續其他模組require引用使用。

  所以到這裡只是解釋了運行的關係,那為啥弄兩個呢?對啊為啥啊?只要module.exports不就行了,你賦值給它返回也是它多正常,非要弄個exports幹啥么蛾子。 。 。 。哈哈,我理解的是,沒錯,你總是用module.exports是可以的而且不會出錯,但是每次都這麼寫:

module.exports.a = 1;  
module.exports.b = function() {};  
module.exports.c = 'ccc';

覺得累麼??那這樣寫好了:

exports.a = 1;  
exports.b = function() {};  
exports.c = 'ccc';

矣是不是清爽一些?矣?難道就是我了少寫才弄出來exports的麼。 。 。我覺得好像是的哈哈哈,程式設計師都是極懶主義者嘛。 那麼問題來了,那都用exports好了,不用module.exports唄,那可要小心了,弄不好會出錯,比如:

exports = function A() {}


  你想導出一個類,寫成這個樣子,想想上面那張圖上的話,返回的可是module.exports,這裡的賦值把exports和module.exports的關係打斷了,所以你引用的時候會得到什麼呢?沒錯,空的對象。 。 。

  所以結論呢?

當你想導出的東東可以在空對像上直接擴展就可以的時候,用exports當然省時省力

當你想導出的東東要完全覆蓋掉對象的時候,只能用module.exports了

當你傻傻分不清楚的時候請用module.exports。 。 。


  其實不用這麼麻煩,每次寫的時候想想那張圖和那句話,一切都順其自然了不是,哎~為了少寫點兒代碼可是要好好學習啊!!


~為了少寫點兒代碼可是要好好學習啊!!

🎜🎜~為了少寫點兒代碼可是要好好學習啊!!🎜🎜🎜 🎜
陳述:
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn