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 相关文章推荐
js带按钮的提示框可供选择示例代码
Sep 17 Javascript
YUI模块开发原理详解
Nov 18 Javascript
javascript在网页中实现读取剪贴板粘贴截图功能
Jun 07 Javascript
js实现同一页面多个不同运动效果的方法
Apr 10 Javascript
JavaScript整除运算函数ceil和floor的区别分析
Apr 14 Javascript
Jquery实现的简单轮播效果【附实例】
Apr 19 Javascript
socket.io学习教程之基本应用(二)
Apr 29 Javascript
jquery基于layui实现二级联动下拉选择(省份城市选择)
Jun 20 jQuery
微信小程序收藏功能的实现代码
Jun 12 Javascript
JavaScript错误处理操作实例详解
Jan 04 Javascript
详解Node.js使用token进行认证的简单示例
May 25 Javascript
vue+iview使用树形控件的具体使用
Nov 02 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根据分类合并数组的方法实例详解
2013/11/06 PHP
PHP代码优化的53个细节
2014/03/03 PHP
php以post形式发送xml的方法
2014/11/04 PHP
php实现复制移动文件的方法
2015/07/29 PHP
php生成毫秒时间戳的实例讲解
2017/09/22 PHP
htm调用JS代码
2007/03/15 Javascript
Jquery幻灯片特效代码分享--鼠标点击按钮时切换(1)
2015/08/15 Javascript
JSP基于Bootstrap分页显示实例解析
2016/06/12 Javascript
EasyUI Combobox设置默认值 获取text的方法
2016/11/28 Javascript
javascript replace()第二个参数为函数时的参数用法
2016/12/26 Javascript
jquery实现input框获取焦点的方法
2017/02/06 Javascript
javaScript中的空值和假值
2017/12/18 Javascript
解决vue.js提交数组时出现数组下标的问题
2019/11/05 Javascript
vue elementui 实现搜索栏公共组件封装的实例代码
2020/01/20 Javascript
详解Python中的__init__和__new__
2014/03/12 Python
Python中super关键字用法实例分析
2015/05/28 Python
Python基于二分查找实现求整数平方根的方法
2016/05/12 Python
python中子类继承父类的__init__方法实例
2016/12/15 Python
Python 获取windows桌面路径的5种方法小结
2019/07/15 Python
django如何通过类视图使用装饰器
2019/07/24 Python
python 有效的括号的实现代码示例
2019/11/11 Python
wxPython电子表格功能wx.grid实例教程
2019/11/19 Python
Python字符串、列表、元组、字典、集合的补充实例详解
2019/12/20 Python
python map比for循环快在哪
2020/09/21 Python
python mock测试的示例
2020/10/19 Python
手把手教你从PyCharm安装到激活(最新激活码),亲测有效可激活至2089年
2020/11/25 Python
Smilodox官方运动服装店:从运动服到健身配件
2020/08/27 全球购物
建筑自我鉴定
2013/10/19 职场文书
自荐信模版
2013/10/24 职场文书
迟到检讨书800字
2014/01/13 职场文书
公司年会抽奖活动主持词
2014/03/31 职场文书
2014年林业工作总结
2014/12/05 职场文书
公司董事任命书
2015/09/21 职场文书
《分一些蚊子进来》读后感3篇
2020/01/09 职场文书
JavaScript阻止事件冒泡的方法
2021/12/06 Javascript
SpringBoot系列之MongoDB Aggregations用法详解
2022/02/12 MongoDB