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
本身是不同的属性
网友评论