在Node中的JavaScript还有一个重要的概念,模块系统。
require
语法:
var 自定义变量名 = require('模块')
作用:
exports
导出接口对象exports
Node中是模块作用域,默认文件中所有的成员只在当前模块有效
对于希望可以被其他模块访问到的成员,我们需要把这些公开的成员都挂载到exports
接口对象中就可以了
导出多个成员(必须在对象中):
exports.a = 123; exports.b = function(){ console.log('bbb') }; exports.c = { foo:"bar" }; exports.d = 'hello';
也可以通过以下方法来导出多个成员:
module.exports = { foo: 'hello', add: function () { return x + y; } };
module.exports = add;
但是,貌似
window.exports = add; //无意间发现的一个也可以嗷
导出单个成员(直接加载拿到的就是函数,字符串):
module.exports = 'hello';
以下情况会覆盖:
module.exports = 'hello'; //后者会覆盖前者 module.exports = function add(x,y) { return x+y; }
在node中,在每一个模块中都有一个自己的对象
在mdule对象中,有一个成员叫exports。
exports是module.exports的一个引用:
是包含关系,但是……
console.log(exports === module.exports); //true exports.foo = 'bar'; //等价于 module.exports.foo = 'bar';
当给exports重新赋值后例如exports = {}
,指向发生了改变
那么exports!= module.exports
最终return的是module.exports,无论exports中的成员是什么都没用,两者是没关系了。
真正去使用的时候: 导出单个成员:exports.xxx = yyy; 导出多个成员:module.exports 或者 modeule.exports = {};
var module ={ exports:{ foo:'bar', add:function(){ // …… } } }