test.jshtml
exports.name = function() { console.log('张三'); };
index.js使用数组
var test= require('./test.js'); test.name(); // '张三'
错误用法工具
exports = function() { console.log('张三'); };
这样至关于给exports对象从新赋值,不能导出,调用模块不能访问exports对象及其属性ui
说明this
Module.exports
而不是exportsModule.exports
设置任何属性和方法,那么你的模块就是exports设置给Module.exports的
属性
2.1 module.exports与exports使用顺序问题spa
test.js .net
module.exports = {name:'张三'}; exports.getName = function(){ console.log('李四') };
index.js使用code
var test = require('./test.js'); console.log(test.name); // 输出结果 -> 张三 test.getName(); // Uncaught TypeError: test.getName is not a funtion
说明htm
Module.exports
。固然,这有个前提,就是Module.exports
自己不具有任何属性和方法。
若是
Module.exports
已经具有一些属性和方法,那么exports收集来的信息将被忽略
2.2 使用module.exports导出一个类 对象
person.js
module.exports = function(name, age) { this.name = name; this.age = age; this.about = function() { console.log(this.name +' is '+ this.age +' years old'); }; };
index.js 使用
var Person = require('./person.js'); var p1 = new Test('张三', 22); p1.about(); // 张三 is 22 years old
2.3 使用module.exports导出一个数组
test.js
module.exports = ['a', 'b', 'c', 'd', 'e'];
index.js 使用
var test = require('./test.js'); console.log(test[2]); // c
2.4 常见使用方法解释
exports = module.exports = somethings
等价于
module.exports = somethings
exports = module.exports
说明
module.exports = somethings 是对 module.exports 进行了覆盖,此时 module.exports 和 exports 的关系断裂,module.exports 指向了新的内存块,而 exports 仍是指向原来的内存块,为了让 module.exports 和 exports 仍是指向同一块内存或者说指向同一个 “对象”,因此咱们就 exports = module.exports 。
exports.xxx
,至关于在导出对象上挂属性,该属性对调用模块直接可见exports =
至关于给exports对象从新赋值,调用模块不能访问exports对象及其属性module.exports
,这样调用者就是一个类构造器,能够直接new实例
参考资料
https://www.zhihu.com/question/26621212