1. 程式人生 > 程式設計 >Node.js中module.exports 和exports使用誤區

Node.js中module.exports 和exports使用誤區

目錄
  • 一、module,module.exports ,exports含義
  • 二.案例
    • 案例一:
    • 案例二
    • 案例三
    • 案例四

一、module,module.exports ,exports含義

  • module物件:在每個 . 自定義模組中都有一個 module 物件,它裡面儲存了和當前模組有關的資訊
  • module.exports 物件:在node裡自定義的模http://www.cppcns.com塊中,可以使用 module.exports 物件,將自定義的模組內部分的成員共享出去被使用。
  • 當外界(其他js檔案)用require() 方法匯入自定義模組時,得到的就是 module.exports 所指向的物件
  • exports物件
    :由於 module.exports 單詞寫起來比較複雜,為了簡化向外共享成員的程式碼,Node 提供了 exports 物件。預設情況下,exports 和 module.exports 指向同一個物件

注意:使用 require() 方法匯入模組時,匯入的結果,永遠以 module.exports 指向的物件為準
換句話說最終共享的結果,還是以 module.exports 指向的物件為準

二.案例

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

案例一:

定義程式碼

//檔名:01.module.exports和exports誤區
exports.name="小吳"
module.exports ={
    性別:"男",age:18
    
}

輸出程式碼

//檔名:01-test 
//為了測試module.exports ,exports指向結果 案例二三四的輸出程式碼都是此js程式碼http://www.cppcns.com檔案
const obj=require("./01.module.exports和exports誤區")
console.log(obj);

輸出結果

例子1輸出結果

案例一解釋:因為預設情況下,exports 和 module.exports 指向同一個物件,所以開始二者都是指向一個空物件,當export指向新物件name="小吳"後,此時二者都指向這個物件,但是執行後面程式碼則是在記憶體中新開闢一個空間儲存新物件 {性別:“男”,age:18} ,且把這個新物件的引用交給了module.exports,則module.exports就指向新的物件,不指向之前的空物件了,而且由於最終共享的結果,以module.exports 指向的物件為準,所以案例輸出如上圖所示

案例二

定義程式碼

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

輸出結果

案例2輸出結果

案例二解釋:同理當module.exports指向物件name="小吳"後,執行後面程式碼,,exports指向新物件{性別:“男”,age:18},由於最終共享的結果,還是以 module.exports 指向的物件為準
所以案例輸出如上圖所示

案例三

定義程式碼

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

輸出結果

在這裡插入圖片描述

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

案例四

定義程式碼

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

輸出結果

在這裡插入圖片描述

案例四解釋:同理二者開始指向同一空物件,執行程式碼,在記憶體中定義了一個新物件,且把新物件掛載在exports上,此時exports就不指向之前的空物件而指向新定義的物件,module.exports=exports這行程式碼把export的引用關係通過等號賦值給了module.exports,則module.exports也不指向之前的空物件了,也指向新物件了,最後給module.exports指向的新物件又繼續掛載了一個age屬性,所以裡面的所有屬性都被module.exports指向到的,所以最終結果輸出如圖所示

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

到此這篇關於Node.js中module.exports 和exports使用誤區的文章就介紹到這了,更多相關Node.js module.ehttp://www.cppcns.comxports和exports內容請搜尋我們以前的文章或繼續瀏覽下面的www.cppcns.com相關文章希望大家以後多多支援我們!