NodeJS中的exports和module.exports的区别
来源:互联网 发布:地毯胶如何清除 知乎 编辑:程序博客网 时间:2024/06/05 03:33
从一开始接触nodejs的时候就开始对模块里面的代码很感兴趣。看多了之后,发现一个问题,就是有一些地方导出是这样的:
//module1.jsmodule.exports = Object;function Object () { //constructor}
有一些地方导出是这样的:
//module2.js//function 1exports.func1 = function () { //do something}//function2exports.func2 = function () { //do something}
还有一些地方导出是这样的:
//module3exports = module.exports = Object;function Object() { //constructor}
这就让人很费解了。为什么要有这么多的导出的方式。这些方式之间有什么区别。在什么时候用什么方式呢。
在这之前,先了解一下module 和 exports 到底是什么东西。直接看代码:
//testmodule.jsconsole.log(module.exports === exports); //true
可以看出,其实module.exports和exports其实是同一个东西。它们的定义其实是类似这样的:
var theModule = { exports: {}};(function(module, exports, require) { // Your module code goes here})(theModule, theModule.exports, theRequireFunction);
也就是说,在初始化的时候,module.exports和exports指向同一个空对象:
所以,无论是给exports的原型还是module.exports的原型加上属性,都会给它们指向的空对象加上属性。比如:
module.exports.name = 'shi zhangfan';exports.age = 26;
那么这个模块导出的对象如下:
{ name: 'shi zhangfan', age: 26 }
但是,使用module.exports和exports还是有区别的!
使用module.exports的话,那么exports也会指向这个对象,但是如果使用exports.foo的话,那么exports.foo指向了新对象,但是module.exports还是指向原来的空对象,就像这样:
所以,这就是为什么要用到下面这种形式了:
exports = module.exports = function () {/* ... */}
这样的话,module.exports和exports依然会指向相同的对象。
阅读全文
0 0
- nodejs exports和module.exports的区别
- NodeJS中的exports和module.exports的区别
- nodejs exports和module.exports区别
- nodejs中exports和module.exports区别
- nodejs module.exports和exports的区别和联系
- nodeJs中exports和module.exports的区别
- nodejs中module.exports和exports.xx的区别
- nodejs中 exports 和 module.exports 的区别
- nodejs 中关于 exports 和 module.exports 的区别
- 整理nodejs中的exports 和 module.exports的关系
- 初识Nodejs的exports和module.exports
- Nodejs的exports和module.exports
- [nodejs]exports和module.exports
- Node.js中的module.exports和exports的区别
- exports 和 module.exports 的区别
- [前端] exports 和 module.exports 的区别
- exports 和 module.exports 的区别
- exports 和 module.exports 的区别
- rsyslog 入门 第三篇 omkafka
- Error问题解决
- Python3.5——Pandas模块使用(中)——DataFrame
- oracle 数据导入导出
- mybatis错误之BindingException
- NodeJS中的exports和module.exports的区别
- Js判断Flash是否安装及版本
- 1013. 数素数 (20)
- 阻止移动端 弹层 touchmove 底层的 html overflow 的元素也跟随移动
- Ubuntu 安装 JDK 7 / JDK8 的两种方式
- AD&ADSI
- 安卓强制关闭软键盘输入法
- 关于MJRefresh上拉加载后仍能看到提示的解决办法
- rsyslog 入门 第四篇 out put redis : hiredis