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

node.js中的导入导出

定义

exports——导出

module.exports——导出

require——导入

概念:require导入的是module.exports的值,或是基本类型,或是引用类型,默认module.exports是一个空对象{},而exports只是module.exports的默认空对象{}的引用(地址)而已

这句话一定要理解,后面解释都是按上面这条概念解释的而已

分别给module.exportsexports的默认值指向的对象{}添加属性

// index.js
module.exports.name = '我是默认对象下的name属性'
exports.name1 = "我是exports引用的对象下的name1属性"
var ind = require('./index.js')

console.log(module.exports);
// { name: '我是默认对象下的name属性', name1: '我是exports引用的对象下的name1属性' }
console.log(exports);
// { name: '我是默认对象下的name属性', name1: '我是exports引用的对象下的name1属性' }
console.log(ind);
// { name: '我是默认对象下的name属性', name1: '我是exports引用的对象下的name1属性' }

结果:很明显,module.exportsexports默认值指向的就是同一个对象的地址

好,稍作修改,我们在module.exportsexports添加属性后,把module.exports的值指向一个新的对象,看看会发生什么

module.exports.name = '我是默认对象下的name属性'
exports.name1 = "我是exports引用的对象下的name1属性"
module.exports = {
  newName:'我是新赋值的对象下的newName属性'
}
var ind = require('./index.js')

console.log(module.exports);
// { newName: '我是新赋值的对象下的newName属性' }
console.log(exports);
// { name: '我是默认对象下的name属性', name1: '我是exports引用的对象下的name1属性' }
console.log(ind);
// { newName: '我是新赋值的对象下的newName属性' }

module.exports指向被我们改了

exports指向我们没改,保持正常

require导出的内容变了

说明:导出的是module.exports,而不是exports,module.exportsexports本身是不同的属性

你可能感兴趣的:(六.JavaScript——exports、module.exports、require)