• linkedu视频
  • 平面设计
  • 电脑入门
  • 操作系统
  • 办公应用
  • 电脑硬件
  • 动画设计
  • 3D设计
  • 网页设计
  • CAD设计
  • 影音处理
  • 数据库
  • 程序设计
  • 认证考试
  • 信息管理
  • 信息安全
菜单
linkedu.com
  • 网页制作
  • 数据库
  • 程序设计
  • 操作系统
  • CMS教程
  • 游戏攻略
  • 脚本语言
  • 平面设计
  • 软件教程
  • 网络安全
  • 电脑知识
  • 服务器
  • 视频教程
  • JavaScript
  • ASP.NET
  • PHP
  • 正则表达式
  • AJAX
  • JSP
  • ASP
  • Flex
  • XML
  • 编程技巧
  • Android
  • swift
  • C#教程
  • vb
  • vb.net
  • C语言
  • Java
  • Delphi
  • 易语言
  • vc/mfc
  • 嵌入式开发
  • 游戏开发
  • ios
  • 编程问答
  • 汇编语言
  • 微信小程序
  • 数据结构
  • OpenGL
  • 架构设计
  • qt
  • 微信公众号
您的位置:首页 > 程序设计 >JavaScript > 详解Node.js中exports和module.exports的区别

详解Node.js中exports和module.exports的区别

作者:村里有个小芳是姑娘 字体:[增加 减小] 来源:互联网 时间:2017-05-11

村里有个小芳是姑娘通过本文主要向大家介绍了node module.exports,node.js exports,node exports,module.exports,js module.exports等相关知识,希望对您有所帮助,也希望大家支持linkedu.com www.linkedu.com

今天看了下node.js的require方法的源码,终于搞清楚exports和module.exports的区别了。

我们知道,node.js的模块暴露有两种方法。

1. 方式一:用exports

//a.js

 exports.log =function (str) {
  console.log(str);
}
</div>
//b.js

 var s = require("./a");
 s.log("哈哈哈哈");
</div>

2. 方式二:用module.exports

//a.js
 module.exports = function (str) {
    console.log(str);
 }

//b.js
 var s = require("./a");
 s("嘻嘻嘻嘻");
</div>

如果将第一种方式的exports按照第二种方式写成下面这样就会出错:

//a.js
 exports = function (str) {
  console.log(str);
}
//b.js

 var s = require("./a");
 s("哈哈哈哈");
</div>

exports和module.exports的初始值指向的是空对象,即{}。从源码可以看到,其实模块的require方法实质上是调用了_load方法,而_load方法,最终返回的是module.exports

 

来分析一下出错的原因。

由于最开始的时候,exports和module.exports都指向同一个对象。

第一种方式,是在给这个空对象{}添加属性,又因为module.exports也是指向这个对象的,所以最终require方法返回的module.exports是指向了这个具有log方法的对象的,可以引用到模块。

第二种方式是让module.exports指向一片新的内存空间,exports指向的仍然是{},但是由于require方法返回的是module.exports,所以最终也能引入模块。

但是最后那种写法是让exports指向一片新的内存空间,module.exports指向的仍然还是{},那么最终require方法是将module.exports返回,所以会导致报错,说s不是一个function。

所以:

请牢记:require方法返回的是module.exports!

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持。

</div>
分享到:QQ空间新浪微博腾讯微博微信百度贴吧QQ好友复制网址打印

您可能想查找下面的文章:

  • 详解Node.js中exports和module.exports的区别
  • Node.js 中exports 和 module.exports 的区别

相关文章

  • 2017-05-11JS简单获取当前日期和农历日期的方法
  • 2017-05-11javascript获取以及设置光标位置
  • 2017-08-21js计时器的两种方法
  • 2017-05-11微信小程序 天气预报开发实例代码源码
  • 2017-05-11springMVC + easyui + $.ajaxFileUpload实现文件上传注意事项
  • 2017-05-11Node连接mysql数据库方法介绍
  • 2017-05-11jQuery点击头像上传并预览图片
  • 2017-05-11Vue.js仿Metronic高级表格(二)数据渲染
  • 2017-09-16js对用户输入非法字符进行编解码预防xss
  • 2017-05-11基于jQuery实现选项卡效果

文章分类

  • JavaScript
  • ASP.NET
  • PHP
  • 正则表达式
  • AJAX
  • JSP
  • ASP
  • Flex
  • XML
  • 编程技巧
  • Android
  • swift
  • C#教程
  • vb
  • vb.net
  • C语言
  • Java
  • Delphi
  • 易语言
  • vc/mfc
  • 嵌入式开发
  • 游戏开发
  • ios
  • 编程问答
  • 汇编语言
  • 微信小程序
  • 数据结构
  • OpenGL
  • 架构设计
  • qt
  • 微信公众号

最近更新的内容

    • 微信JS-SDK选取手机照片上传功能
    • canvas仿iwatch时钟效果
    • JavaScript & jQuery完美判断图片是否加载完毕
    • jQuery插件zTree实现删除树节点的方法示例
    • javascript Module
    • 利用Chrome DevTools直接调试Node.js和JavaScript的方法详解(并行)
    • 推荐三款不错的图片压缩上传插件(webuploader、localResizeIMG4、LUploader)
    • Node.js获取前端ajax提交的request信息
    • javascript实现页面滚屏效果
    • jQuery使用EasyUi实现三级联动下拉框效果

关于我们 - 联系我们 - 免责声明 - 网站地图

©2020-2025 All Rights Reserved. linkedu.com 版权所有