node.js中module.exports与exports用法上的区别


Posted in Javascript onSeptember 02, 2016

 Node.js 引入了模块(Module)概念,一个模块可以通过module.exports 或 exports 将函数、变量等导出,以使其它 JavaScript 脚本通过require() 函数引入并使用。 

module.exports 初始值为一个空对象 {},所以 exports 初始值也是 {},exports 是指向的 module.exports 的引用,在模块内部大概是这样:

exports = module.exports = {};

举个栗子,在node.js中创建模块非常简单,一个文件就是一个模块,所以我们创建一个name.js文件就创建了一个模块name.js,使用exports和require对象对外提供接口和引用模块。

name.js

var myName=function(){
var name='AmberYLopez';
console.log(name);
};
exports.myName=myName;

这样在使用的时候需要这样

app.js

var name=require('./name');

如果我们创建的name.js文件是使用module.exports和require对象对外提供接口和引用模块。

name.js 

var myName=function(){
var name='AmberYLopez';
console.log(name);
};
module.exports=myName;

app.js

var name=require('./name');

exports 赋值其实是给 module.exports 这个空对象添加myName属性而已,为什么exports要使用添加属性的方式,而不用exports=myName?

exports是引用 module.exports的值。exports 被改变的时候,module.exports不会被改变,而模块导出的时候,真正导出的执行是module.exports,而不是exports。

如果将name.js改为

var myName=function(){
var name='AmberYLopez';
console.log(name);
};
exports=myName;

app.js

var name=require('./name');<br>console.log(name);

运行会报错。因为,前面是通过给 exports 添加属性,而现在对 exports 指向的内存做了修改,exports 和 module.exports 不再指向同一块内存,即 module.exports 指向的那块内存并没有做任何改变,仍然为一个空对象 {},所以会报错。

Javascript 相关文章推荐
jQuery lazyLoad图片延迟加载插件的优化改造方法分享
Aug 13 Javascript
一个jquery实现的不错的多行文字图片滚动效果
Sep 28 Javascript
Highcharts学习之数据列
Aug 03 Javascript
JavaScript组合模式学习要点
Aug 26 Javascript
使用Javascript判断浏览器终端设备(PC、IOS(iphone)、Android)
Jan 04 Javascript
jQuery Masonry瀑布流布局神器使用详解
May 25 jQuery
node.js 利用流实现读写同步,边读边写的方法
Sep 11 Javascript
浅谈vue项目重构技术要点和总结
Jan 23 Javascript
详解vue-cli项目中怎么使用mock数据
May 29 Javascript
JavaScript实现的3D旋转魔方动画效果实例代码
Jul 31 Javascript
详解js中的原型,原型对象,原型链
Jul 16 Javascript
微信小程序实现登录注册功能
Dec 29 Javascript
AngularJs Scope详解及示例代码
Sep 01 #Javascript
AngularJs Modules详解及示例代码
Sep 01 #Javascript
AngularJs IE Compatibility 兼容老版本IE
Sep 01 #Javascript
AngularJs 国际化(I18n/L10n)详解
Sep 01 #Javascript
AngularJs Forms详解及简单示例
Sep 01 #Javascript
vue.js入门教程之计算属性
Sep 01 #Javascript
AngularJs expression详解及简单示例
Sep 01 #Javascript
You might like
php a simple smtp class
2007/11/26 PHP
PHP学习笔记(三):数据类型转换与常量介绍
2015/04/17 PHP
PHP互换两个变量值的方法(不用第三变量)
2016/11/14 PHP
Jquery 表格合并的问题分享
2011/09/17 Javascript
jquery解析XML字符串和XML文件的方法说明
2014/02/21 Javascript
JS实现浏览器状态栏文字闪烁效果的方法
2015/10/27 Javascript
手机图片预览插件photoswipe.js使用总结
2016/08/25 Javascript
JS自定义函数对web前端上传的文件进行类型大小判断
2016/10/19 Javascript
Javascript oop设计模式 面向对象编程简单实例介绍
2016/12/13 Javascript
基于JavaScript实现购物车功能
2017/02/07 Javascript
修改UA在PC中访问只能在微信中打开的链接方法
2017/11/27 Javascript
Vue修改mint-ui默认样式的方法
2018/02/03 Javascript
vue+element-ui+ajax实现一个表格的实例
2018/03/09 Javascript
vue项目中,main.js,App.vue,index.html的调用方法
2018/09/20 Javascript
实现一个Vue自定义指令懒加载的方法示例
2020/06/04 Javascript
原生JavaScript实现贪吃蛇游戏
2020/11/04 Javascript
利用 Chrome Dev Tools 进行页面性能分析的步骤说明(前端性能优化)
2021/02/24 Javascript
Python XML RPC服务器端和客户端实例
2014/11/22 Python
python实现的DES加密算法和3DES加密算法实例
2015/06/03 Python
Python的Tornado框架实现图片上传及图片大小修改功能
2016/06/30 Python
Python基础中所出现的异常报错总结
2016/11/19 Python
python基于twisted框架编写简单聊天室
2018/01/02 Python
pyQt4实现俄罗斯方块游戏
2018/06/26 Python
浅析PEP570新语法: 只接受位置参数
2019/10/15 Python
pycharm全局搜索的具体步骤
2020/07/28 Python
Python map及filter函数使用方法解析
2020/08/06 Python
详解Python中string模块除去Str还剩下什么
2020/11/30 Python
美国著名的团购网站:Woot
2016/08/02 全球购物
蒂娜商店:Tiina the Store
2019/12/07 全球购物
《歌唱二小放牛郎》教学反思
2014/04/19 职场文书
小学生学雷锋演讲稿
2014/04/25 职场文书
维修工先进事迹
2014/05/29 职场文书
航海技术专业毕业生推荐信
2014/07/09 职场文书
委托公证书样本
2015/01/23 职场文书
2015年大学教师工作总结
2015/05/20 职场文书
医院中层管理人员培训心得体会
2016/01/11 职场文书