每一个node.js执行文件,都自动创建一个module对象,同时,module对象会创建一个叫exports的属性,初始化的值是 {},只有通过exports或module.exports将其暴露出去,外部才能通过require() 进行访问。
① module.exports 初始值为一个空对象 {}
② exports 是指向的 module.exports 的引用
③ require() 返回的是 module.exports 而不是 exports
④ 综上,可以说 exports 是给 module.exports 添加属性和方法!!!
示例:fool.js
exports.a = function(){ console.log('a') } exports.a = 1; module.exports = {a: 2}; exports.a = 3;
执行 test.js
var c = require('./fool'); //require() 返回的是 module.exports 而不是 exports console.log(c.a);//2
他们之间的关系就像:
var a = new Object();//a相当于module.exports var b = a; //b相当于exports
5.在深入一点:exports返回的是一个json对象,而module.exports可以返回任何形式的数据格式,例如数组,字符串,数字等类型时,我们必须要用module.exports
//test.js module.exports = '我是module.exports暴露的字符串'; exports.name = '我是exports暴露的name'; exports.method = function(){ console.log('我是exports暴露的method'); }; console.log("我是console.log(exports)的结果:"); console.log(exports); console.log();
//fool.js var obj = require('./test.js'); console.log("我是console.log(module.exports)的结果:"); console.log(module.exports); console.log(); console.log("我是console.log(obj)的结果:"); console.log(obj);//require() 返回的是 module.exports 而不是 exports
执行 fool.js :
我是console.log(exports)的结果: { name: '我是exports暴露的name', method: [Function] } 我是console.log(module.exports)的结果: {} 我是console.log(obj)的结果: 我是module.exports暴露的字符串