nodejs exports和module.exports的區(qū)別

php web開(kāi)發(fā)的過(guò)程中,前端js需要引用另一個(gè)js的代碼,常??吹接胑xports的方式。那么 exports和module.exports有什么不同呢?

先通過(guò)實(shí)例來(lái)體會(huì)一下,這里使用runoob上的sample來(lái)介紹。

module.exports示例

創(chuàng)建hello.js文件如下:

創(chuàng)建main.js文件如下:

然后運(yùn)行node main.js ,則打印出下面的語(yǔ)句,表明Hello函數(shù)正常執(zhí)行

執(zhí)行對(duì)象主題代碼

簡(jiǎn)單解讀

require函數(shù)會(huì)將參數(shù)里的文件加載,并將Hello函數(shù)的代碼賦值給exports,然后exports又賦值給外面的Hello變量,也即hello.js的Hello函數(shù)實(shí)體代碼 賦值給了變量Hello,使用Hello()來(lái)執(zhí)行這個(gè)函數(shù)

外部執(zhí)行對(duì)象的方法

因?yàn)閖s代碼,函數(shù)也即是對(duì)象。上面的hello.js中,Hello對(duì)象有兩個(gè)方法,但是我們只是把它當(dāng)函數(shù)來(lái)運(yùn)行,將對(duì)象定義的主體的代碼執(zhí)行了。

如果要執(zhí)行定義體里定義的函數(shù),則需要?jiǎng)?chuàng)建成對(duì)象來(lái)調(diào)用,見(jiàn)下圖的main.js

然后運(yùn)行node main.js ,則打印出下面的語(yǔ)句,表明創(chuàng)建的hello對(duì)象的成員函數(shù)正常執(zhí)行

執(zhí)行對(duì)象主題代碼

Hello BYVoid

再使用exports的方式導(dǎo)出

上面展示的是module.exports的方式導(dǎo)出文件代碼,實(shí)則導(dǎo)出的就是一個(gè)函數(shù)。下面看看exports的方式,先把hello.js改成exports的方式

main.js改成下面兩行,運(yùn)行node main.js, 則打印出下面的語(yǔ)句,表明Hello函數(shù)正常執(zhí)行

執(zhí)行對(duì)象主題代碼

原因解析:require將hello.js的代碼載入,exports的代碼賦值給了hello變量,即exports和hello是對(duì)等的。而exports下掛了一個(gè)Hello函數(shù),那么要執(zhí)行這個(gè)函數(shù)的話,就需要hello.Hello()調(diào)用即可。

把函數(shù)轉(zhuǎn)換成對(duì)象來(lái)調(diào)用其中的方法

現(xiàn)在把main.js改成下面的方式,就可以將hello.js轉(zhuǎn)換成對(duì)象,并訪問(wèn)對(duì)象的方法了


簡(jiǎn)言之,被require的文件中的exports相當(dāng)于 主文件中的被賦值的那個(gè)變量。

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請(qǐng)結(jié)合常識(shí)與多方信息審慎甄別。
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡(jiǎn)書(shū)系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

友情鏈接更多精彩內(nèi)容