溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點擊 登錄注冊 即表示同意《億速云用戶服務條款》

Node.js中module.exports和exports使用誤區(qū)是什么

發(fā)布時間:2022-02-07 15:54:12 來源:億速云 閱讀:125 作者:iii 欄目:開發(fā)技術

這篇文章主要講解了“Node.js中module.exports和exports使用誤區(qū)是什么”,文中的講解內(nèi)容簡單清晰,易于學習與理解,下面請大家跟著小編的思路慢慢深入,一起來研究和學習“Node.js中module.exports和exports使用誤區(qū)是什么”吧!

一、module,module.exports ,exports含義

  • module對象:在每個 .js 自定義模塊中都有一個 module 對象,它里面存儲了和當前模塊有關的信息

  • module.exports 對象:在node里自定義的模塊中,可以使用 module.exports 對象,將自定義的模塊內(nèi)部分的成員共享出去被使用。

  • 當外界(其他js文件)用require() 方法導入自定義模塊時,得到的就是 module.exports 所指向的對象

  • exports對象:由于 module.exports 單詞寫起來比較復雜,為了簡化向外共享成員的代碼,Node 提供了 exports 對象。默認情況下,exports 和 module.exports 指向同一個對象

注意:使用 require() 方法導入模塊時,導入的結(jié)果,永遠以 module.exports 指向的對象為準
換句話說最終共享的結(jié)果,還是以 module.exports 指向的對象為準

二.案例

通過案例來理解二者的關系

案例一:

定義代碼

//文件名:01.module.exports和exports誤區(qū)
exports.name="小吳"
module.exports ={
    性別:"男",
    age:18
    
}

輸出代碼

//文件名:01-test 
//為了測試module.exports ,exports指向結(jié)果 案例二三四的輸出代碼都是此js代碼文件
const obj=require("./01.module.exports和exports誤區(qū)")
console.log(obj);

輸出結(jié)果

Node.js中module.exports和exports使用誤區(qū)是什么

案例一解釋:因為默認情況下,exports 和 module.exports 指向同一個對象,所以開始二者都是指向一個空對象,當export指向新對象name="小吳"后,此時二者都指向這個對象,但是執(zhí)行后面代碼則是在內(nèi)存中新開辟一個空間存儲新對象 {性別:“男”,age:18} ,且把這個新對象的引用交給了module.exports,則module.exports就指向新的對象,不指向之前的空對象了,而且由于最終共享的結(jié)果,以module.exports 指向的對象為準,所以案例輸出如上圖所示

案例二

定義代碼

module.exports.name="小吳"
exports ={
    性別:"男",
    age:18
    
}

輸出結(jié)果

Node.js中module.exports和exports使用誤區(qū)是什么

案例二解釋:同理當module.exports指向?qū)ο髇ame="小吳"后,執(zhí)行后面代碼,,exports指向新對象{性別:“男”,age:18},由于最終共享的結(jié)果,還是以 module.exports 指向的對象為準
所以案例輸出如上圖所示

案例三

定義代碼

exports.name="小吳"
module.exports.age=18

輸出結(jié)果

Node.js中module.exports和exports使用誤區(qū)是什么

案例三解釋:同理二者開始指向空對象,第一行代碼通過exports引用關系掛載了一個name屬性,第二行又通過module.exports引用關系掛載了一個屬性age 這里不存在新對象 都是掛載屬性 這些屬性都被放在了開始二者指向的空對象中,則最終兩個屬性都在此對象中,且module.exports指向這個對象,所以最終結(jié)果輸出如上圖所示

案例四

定義代碼

exports={
    性別:"男",
    name:"小吳",
    
}
module.exports=exports//把export的引用關系通過等號賦值給了module.exports
module.exports.age=18

輸出結(jié)果

Node.js中module.exports和exports使用誤區(qū)是什么

案例四解釋:同理二者開始指向同一空對象,執(zhí)行代碼,在內(nèi)存中定義了一個新對象,且把新對象掛載在exports上,此時exports就不指向之前的空對象而指向新定義的對象,module.exports=exports這行代碼把export的引用關系通過等號賦值給了module.exports,則module.exports也不指向之前的空對象了,也指向新對象了,最后給module.exports指向的新對象又繼續(xù)掛載了一個age屬性,所以里面的所有屬性都被module.exports指向到的,所以最終結(jié)果輸出如圖所示

重要注意:為了防止二者指向混亂,建議不要在同一個模塊中同時使用 exports 和 module.exports

感謝各位的閱讀,以上就是“Node.js中module.exports和exports使用誤區(qū)是什么”的內(nèi)容了,經(jīng)過本文的學習后,相信大家對Node.js中module.exports和exports使用誤區(qū)是什么這一問題有了更深刻的體會,具體使用情況還需要大家實踐驗證。這里是億速云,小編將為大家推送更多相關知識點的文章,歡迎關注!

向AI問一下細節(jié)

免責聲明:本站發(fā)布的內(nèi)容(圖片、視頻和文字)以原創(chuàng)、轉(zhuǎn)載和分享為主,文章觀點不代表本網(wǎng)站立場,如果涉及侵權請聯(lián)系站長郵箱:is@yisu.com進行舉報,并提供相關證據(jù),一經(jīng)查實,將立刻刪除涉嫌侵權內(nèi)容。

AI