六.JavaScript——exports、module.exports、require

node.js中的導(dǎo)入導(dǎo)出

定義

exports——導(dǎo)出

module.exports——導(dǎo)出

require——導(dǎo)入

概念:require導(dǎo)入的是module.exports的值,或是基本類(lèi)型,或是引用類(lèi)型,默認(rèn)module.exports是一個(gè)空對(duì)象{},而exports只是module.exports的默認(rèn)空對(duì)象{}的引用(地址)而已

這句話一定要理解,后面解釋都是按上面這條概念解釋的而已

分別給module.exportsexports的默認(rèn)值指向的對(duì)象{}添加屬性

// index.js
module.exports.name = '我是默認(rèn)對(duì)象下的name屬性'
exports.name1 = "我是exports引用的對(duì)象下的name1屬性"
var ind = require('./index.js')

console.log(module.exports);
// { name: '我是默認(rèn)對(duì)象下的name屬性', name1: '我是exports引用的對(duì)象下的name1屬性' }
console.log(exports);
// { name: '我是默認(rèn)對(duì)象下的name屬性', name1: '我是exports引用的對(duì)象下的name1屬性' }
console.log(ind);
// { name: '我是默認(rèn)對(duì)象下的name屬性', name1: '我是exports引用的對(duì)象下的name1屬性' }

結(jié)果:很明顯,module.exportsexports默認(rèn)值指向的就是同一個(gè)對(duì)象的地址

好,稍作修改,我們?cè)?code>module.exports和exports添加屬性后,把module.exports的值指向一個(gè)新的對(duì)象,看看會(huì)發(fā)生什么

module.exports.name = '我是默認(rèn)對(duì)象下的name屬性'
exports.name1 = "我是exports引用的對(duì)象下的name1屬性"
module.exports = {
  newName:'我是新賦值的對(duì)象下的newName屬性'
}
var ind = require('./index.js')

console.log(module.exports);
// { newName: '我是新賦值的對(duì)象下的newName屬性' }
console.log(exports);
// { name: '我是默認(rèn)對(duì)象下的name屬性', name1: '我是exports引用的對(duì)象下的name1屬性' }
console.log(ind);
// { newName: '我是新賦值的對(duì)象下的newName屬性' }

module.exports指向被我們改了

exports指向我們沒(méi)改,保持正常

require導(dǎo)出的內(nèi)容變了

說(shuō)明:導(dǎo)出的是module.exports,而不是exports,module.exportsexports本身是不同的屬性

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡(jiǎn)書(shū)系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。

推薦閱讀更多精彩內(nèi)容