node.js中的导入导出
定义
exports——导出
module.exports——导出
require——导入
概念:
require导入的是module.exports的值,或是基本类型,或是引用类型,默认module.exports是一个空对象{},而exports只是module.exports的默认空对象{}的引用(地址)而已
这句话一定要理解,后面解释都是按上面这条概念解释的而已
分别给module.exports和exports的默认值指向的对象{}添加属性
// 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.exports和exports默认值指向的就是同一个对象的地址
好,稍作修改,我们在module.exports和exports添加属性后,把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.exports和exports本身是不同的属性









网友评论