module.exports和exports使用誤區(qū)案例分析
module.exports和exports使用誤區(qū)
使用require()模塊時,得到的永遠(yuǎn)都是module.exports指向的對象
1.誤區(qū)一
exports.username = 'zs' exports.sayHello = function() { console.log('Hello!'); } module.exports = { gender: '男', age: 20 }
因?yàn)槟J(rèn)情況下,exports 和 module.exports 指向同一個對象,二者開始都是指向一個空對象,當(dāng)export指向新對象username="zs"
后,此時二者都指向這 個對象,但是執(zhí)行后面代碼則是在內(nèi)存中新開辟一個空間存儲新對象 {gender:“男”,age:20}
,且把這個新對象的引用交給了module.exports
,則module.exports
就指向新的對象,不指向之前的對象了
所以這時候,如果使用require()
模塊,得到的就是module.exports
此時指向的對象
注意:此處的module.exports已經(jīng)被重新定義!require()得到的是重新定義之后的導(dǎo)出對象!
2.誤區(qū)二
module.exports.username = 'zs' exports = { gender:'男', age:22 }
exports 和 module.exports 開始指向一個空對象,當(dāng)module.export指向新對象username="zs"
后,此時二者都指向這個對象,但是執(zhí)行后面代碼則是在內(nèi)存 中新開辟一個空間存儲新對象 {gender:“男”,age:20}
,且把這個新對象的引用交給了exports,但是module.exports指向?qū)ο?沒有變,還是指向之前的對象
所以使用require()模塊時,module.exports指向的對象還是原來的對象
注意:優(yōu)先級還是module.exports的最高?。equire()優(yōu)先引用的還是module.exports所導(dǎo)出的對象!
3.誤區(qū)三
exports.username = 'zs' module.exports.gender = '男'
二者開始指向空對象,第一 行代碼通過exports引用關(guān)系掛載了一個name屬性,第二行又通過module.exports引用關(guān)系掛載了一個屬性age 這里不存在新對象 都是掛載屬性 這些屬性都被放在了開始二者指向的對象中,最終兩個屬性都在此對象中
此時使用require()模塊時,module.exports指向的對象沒有變 ,但是此時指向?qū)ο笊嫌袃蓚€屬性
注意:這里的module.exports.gender = '男'
是在module.exports導(dǎo)出對象的基礎(chǔ)上再次增加的屬性,module.exports所指向的地址并沒有改變!
4.誤區(qū)四
exports = { uesrname: 'zs', gender: '男' } module.exports = exports module.exports.age = 22
同理二者開始指向同一空對象,執(zhí)行代碼,在內(nèi)存中定義了一個新對象,且把新對象掛載在exports上,此時exports就不指向之前的空對象 而指向新定義的對象,module.exports=exports
這行代碼把export的引用關(guān)系通過等號賦值給了module.exports
,則module.exports
也不指向之前的空對象了,也指向新對象了,最后給module.exports
指向的新對象又繼續(xù)掛載了一個age屬性
此時使用require()
模塊時 ,module.exports
指向的對象沒有變,但是此時指向?qū)ο笊嫌袃蓚€屬性
謹(jǐn)記,使用require()模塊時,得到的永遠(yuǎn)都是module.exports指向的對象
所以,為了防止這種混亂,以后在一個模塊中,不 要同時使用exports和module.exports
- CommonJS與ES6?Module的使用區(qū)別分析
- JavaScript ES6 Module模塊詳解
- node.js的exports、module.exports與ES6的export、export default深入詳解
- ES6入門教程之Class和Module詳解
- ES6中module模塊化開發(fā)實(shí)例淺析
- ES6新特性之模塊Module用法詳解
- Node.JS中的模塊、exports和module講解
- Node.js?中的?module.exports?與?exports區(qū)別介紹
- Node.js中module.exports?和exports使用誤區(qū)
- 詳解Node.js中exports和module.exports的區(qū)別
- Node.js 中exports 和 module.exports 的區(qū)別
- node.js中module.exports與exports用法上的區(qū)別
相關(guān)文章
node.js中ws模塊創(chuàng)建服務(wù)端與客戶端實(shí)例代碼
在Node.js中提供了http模塊與https模塊,專用于創(chuàng)建HTTP服務(wù)器、HTTP客戶端,以及HTTPS服務(wù)器及HTTPS客戶端,同時實(shí)現(xiàn)這些服務(wù)器端與客戶端之中所需進(jìn)行的處理,下面這篇文章主要給大家介紹了關(guān)于node.js中ws模塊創(chuàng)建服務(wù)端與客戶端的相關(guān)資料,需要的朋友可以參考下2023-05-05nodejs socket服務(wù)端和客戶端簡單通信功能
這篇文章主要為大家詳細(xì)介紹了nodejs socket服務(wù)端和客戶端簡單通信功能,具有一定的參考價值,感興趣的小伙伴們可以參考一下2017-09-09