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 相关文章推荐
myEvent.js javascript跨浏览器事件框架
Oct 24 Javascript
Jquery多选框互相内容交换的实例代码
Jul 04 Javascript
jquery.cookie用法详细解析
Dec 18 Javascript
jQuery中:first选择器用法实例
Dec 30 Javascript
基于JS实现textarea中获取动态剩余字数的方法
May 25 Javascript
jQuery封装的屏幕居中提示信息代码
Jun 08 Javascript
JS常用字符串方法(推荐)
Jan 15 Javascript
JS传递对象数组为参数给后端,后端获取的实例代码
Jun 28 Javascript
AngularJS ng-bind-html 指令详解及实例代码
Jul 30 Javascript
Angular通过指令动态添加组件问题
Jul 09 Javascript
原生js通过一行代码实现简易轮播图
Jun 05 Javascript
5种 JavaScript 方式实现数组扁平化
Oct 05 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 输出双引号&quot;与单引号'的方法
2010/05/09 PHP
关于php mvc开发模式的感想
2011/06/28 PHP
php教程之phpize使用方法
2014/02/12 PHP
PHP的魔术常量__METHOD__简介
2014/07/08 PHP
ThinkPHP实现支付宝接口功能实例
2014/12/02 PHP
gearman中worker常驻后台,导致MySQL server has gone away的解决方法
2020/02/27 PHP
如何取得中文输入的真实长度?
2006/06/24 Javascript
JS 对象介绍
2010/01/20 Javascript
niceTitle 基于jquery的超链接提示插件
2010/05/31 Javascript
ExtJS的拖拽效果示例
2013/12/09 Javascript
怎么判断js脚本加载完成
2014/02/28 Javascript
jQuery+ajax实现鼠标单击修改内容的思路
2014/06/29 Javascript
js中实现多态采用和继承类似的方法
2014/08/22 Javascript
JavaScript模拟可展开、拖动与关闭的聊天窗口实例
2015/05/12 Javascript
浏览器环境下JavaScript脚本加载与执行探析之动态脚本与Ajax脚本注入
2016/01/19 Javascript
[原创]SyntaxHighlighter自动识别并加载脚本语言
2017/02/07 Javascript
angularjs实现多张图片上传并预览功能
2017/02/24 Javascript
js正则表达式验证表单【完整版】
2017/03/06 Javascript
JS正则表达式验证账号、手机号、电话和邮箱是否合法
2017/03/08 Javascript
Spring Boot/VUE中路由传递参数的实现代码
2018/03/02 Javascript
JS中call()和apply()的功能及用法实例分析
2019/06/28 Javascript
vue基本使用--refs获取组件或元素的实例
2019/11/07 Javascript
TypeScript魔法堂之枚举的超实用手册
2020/10/29 Javascript
[02:40]DOTA2超级联赛专访430 从小就爱玩对抗性游戏
2013/06/18 DOTA
利用python和ffmpeg 批量将其他图片转换为.yuv格式的方法
2019/01/08 Python
django数据库自动重连的方法实例
2019/07/21 Python
使用python+whoosh实现全文检索
2019/12/09 Python
css3 仿写阿里云水纹效果的示例代码
2018/02/10 HTML / CSS
Html5插件教程之添加浏览器放大镜效果的商品橱窗
2016/01/07 HTML / CSS
联想新西兰官方网站:Lenovo New Zealand
2018/10/30 全球购物
简历中求职的个人自我评价
2013/12/03 职场文书
导航工程专业自荐信
2014/09/02 职场文书
公司周年庆典标语
2014/10/07 职场文书
财务工作检讨书
2014/10/29 职场文书
2015年节能减排工作总结
2015/05/14 职场文书
Django实现drf搜索过滤和排序过滤
2021/06/21 Python