require和module.exports探究
- require和module.exports讲解
- require
- exports和module.exports探究
- 留一个疑问?为什么exports和require都能直接使用,是全局变量吗?
require和module.exports讲解
代码语言:javascript复制遵守开闭原则:对修改关闭,对扩展开放,所以要想使用引入的模块,子模块必须提供module.exports方法。否则只能运行子模块
require
- 使用方法 var express = require(“express”);//引入系统模块可以直接引入 var test = require("./test.js");引入自己写的模块需要写相对路径或者绝对路径
exports和module.exports探究
- 导出模块可以使用
var a = 123;
var b = 'abc';
exports.a = a;
module.exports.b = b;
这里的两种方法都能导出该模块,并且,将该模块导出到一个对象当中 此处你是否有疑问呢?为何两个东西会导出到一个对象当中,还是说这两个对象是同一个对象呢?
代码语言:javascript复制 console.log(exports == module.exports):
看到这个结果,确实是表示exports和module.exports是同一个对象
那我们再看看另外一种情况呢
代码语言:javascript复制 var a = 123;
bar b = 'abc';
exports = a;
module.exports = b;
再另一个js中去引入该模块
代码语言:javascript复制 var test = require("./test.js");
这里打印的结果为abc;即使我们讲导出的顺序反过来,结果还是一样,这里就不再做示例了。 综上所述:我们可以得出一些结论:
- exports和module.exports指向的是同一个对象。所以,我们分别再两个上面挂载对象导出时,值再同一个对象里面
- 当我们再两个对象分别赋值新的对象以后,就只能导出其中一个,是因为我们改变了原来的指向,现在指向两个对象 ,我们只能导出module.exports。所以,刚刚看到的结果都是abc