首页 > 技术文章 > exports 和 module.exports 的区别

leyi 2016-01-19 10:59 原文

https://cnodejs.org/topic/5231a630101e574521e45ef8

//一句话总结:exports是对module.exports的引用,require()返回的是 module.exports,
导出非对象接口时用覆盖module.exports的方法,导出对象接口时,exports 和 module.exports都行。 //module.exports 初始值为一个空对象 console.log(module.exports);//{} //exports是对module.exports的引用 console.log(exports);//所以也为{} //给module.exports添加属性方法或者修改module.exports的属性方法,exports对象也可以访问到,因为他们指向同一块内存地址,反之亦然 module.exports.name='123'; module.exports.fn=function(){ console.log(this.name) } module.exports.fn()//123 console.log(exports.name)//123 exports.fn()//123 exports.name='456'; exports.fn=function(){ console.log(this.name) } exports.fn() console.log(module.exports.name)//456 module.exports.fn()//456 //覆盖module.exports或者exports整个对象 function aa(){ console.log('aaaaaaa') } module.exports=aa;//指向了新创建的对象 module.exports()//aaaaaaa console.log(exports) //{ name: '456', fn: [Function] },还是老的地址 exports=module.exports//重新让exports指向module.exports exports()//aaaaaaa //类似于: var x={} var y=x console.log(x)//{} console.log(y)//{} x={'new':'new'} console.log(y)//{} console.log(x)//{'new':'new'} //require() 返回的是 module.exports 而不是 exports //module.exports 写法 //aa.js function abc(ag1){ return ag1 } module.exports='abc' //require(aa) var abc=require('./aa'); abc('ag1') //exports 写法 //aa.js function abc(ag1){ return ag1 } exports.abc=abc;//exports.abc==module.exports.abc //require(aa) var abc=require('./aa');//返回module.exports对象 abc.abc('ag1')//module.exports.abc

  

 

推荐阅读