在Eloquent Javascript(http://eloquentjavascript.net/10_modules.html)中有require()的解释和实现:
...问题是模块无法直接导出 导出对象以外的值,例如函数。对于 例如,模块可能只想导出的构造函数 它定义的对象类型。现在,因为需要它不能这样做 始终使用它创建的导出对象作为导出值。
传统的解决方案是提供另一个模块 变量,module,是一个具有属性导出的对象。这个 property最初指向require创建的空对象但是 可以用其他值覆盖以导出某些内容 其他
function require(name) {
if (name in require.cache)
return require.cache[name];
var code = new Function("exports, module", readFile(name));
var exports = {}, module = {exports: exports};
code(exports, module);
require.cache[name] = module.exports;
return module.exports;
}
require.cache = Object.create(null);
那么,有人可以解释一下,module.exports是一个解决方案吗?为什么我不能覆盖出口?