深入理解node exports和module.exports区别
需积分: 0 38 浏览量
更新于2020-11-22
收藏 27KB PDF 举报
我们只需知道三点即可知道 exports 和 module.exports 的区别了:
1.exports 是指向的 module.exports 的引用
2.module.exports 初始值为一个空对象 {},所以 exports 初始值也是 {}
3.require() 返回的是 module.exports 而不是 exports
所以:
• 我们通过
var name ='nswbmw';
exports.name = name;
exports.sayName =function(){
console.log(name);
}
给 exports 赋值其实是给
在Node.js环境中,模块系统是核心特性之一,用于组织代码并实现代码重用。当我们谈论`exports`和`module.exports`时,这是Node.js模块系统中的两个关键对象,它们经常一起使用,但有着微妙的区别。深入理解这两者的差异对于编写可维护的、高效的Node.js应用至关重要。
1. **exports 是指向 module.exports 的引用**
`exports`对象是默认导出对象的一个快捷方式,它最初被设置为指向`module.exports`的引用。这意味着,当你对`exports`进行操作时,实际上是在操作`module.exports`。然而,需要注意的是,如果你直接对`module.exports`赋值,那么`exports`的引用就会失效,因为它不再指向原来的`module.exports`对象。
2. **module.exports 初始值为一个空对象 {}**
当一个模块加载时,Node.js会创建一个`module`对象,并初始化`module.exports`为一个空对象。这样,开发者可以向这个对象添加属性或方法,以便在其他模块中通过`require()`函数导入和使用。
3. **require() 返回的是 module.exports 而不是 exports**
当我们使用`require()`函数加载一个模块时,返回的是`module.exports`对象,而不是`exports`。这意味着,无论我们对`exports`做了什么,最终导出的将是`module.exports`。因此,如果你直接将新的对象赋值给`module.exports`,`exports`的引用将会失效,因为`exports`仍然指向旧的`module.exports`对象。
例如,下面的代码展示了如何使用`exports`和`module.exports`:
```javascript
// 假设这是我们的模块文件 (mod.js)
var name = 'nswbmw';
// 使用exports
exports.name = name;
exports.sayName = function() {
console.log(name);
};
// 等同于
module.exports.name = name;
module.exports.sayName = function() {
console.log(name);
};
```
如果在另一个文件中导入这个模块:
```javascript
// 另一个文件 (app.js)
var mod = require('./mod');
console.log(mod.name); // 输出 'nswbmw'
mod.sayName(); // 输出 'nswbmw'
```
但是,如果我们直接覆盖`module.exports`:
```javascript
// mod.js
module.exports = {
name: 'nswbmw',
sayName: function() {
console.log(this.name);
}
};
// app.js
var mod = require('./mod');
mod.sayName(); // 输出 'nswbmw'
```
在这个例子中,`exports`对象不再与`module.exports`关联,所以我们不能通过`exports`来访问或修改导出的对象。
`exports`和`module.exports`之间的关系是,`exports`是`module.exports`的一个快捷方式,而`module.exports`是实际导出的对象。当需要导出复杂对象或覆盖默认导出时,直接操作`module.exports`是更安全的选择。了解这一差异有助于避免潜在的错误和混淆,确保模块之间的交互按预期进行。
weixin_38517212
- 粉丝: 8
- 资源: 951
最新资源
- PMP备考常见传统敏捷术语表 PMP备考必备 PMP术语
- 大数据实验2和6数据和python源代码.7z
- 全面解析:JavaScript语言核心技术及应用领域教程
- Java-wms基于JAVA的智能仓储管理系统, 包含PDA端和WEB端, 功能涵盖WMS(仓库管理系统), OMS(订单管理系统), BMS(财务管理系统), TMS(运输管理系统)
- MATLAB环境下基于隐马尔可夫模型-高斯混合模型-期望最大化的图像分割算法 算法运行环境为MATLAB R2021b,使用期望最大化(EM)算法进行图像分割,并同时依赖于高斯混合模型(GMM)和马尔
- 00大数据期末复习资料.7z
- 欧姆龙PLC程序欧姆龙案例欧姆龙标准程序 本产品适用于新手或者需要学习欧姆龙脉冲控制的新手 本程序包括有欧姆龙CP1H脉冲程序案例,威纶通触摸屏程序,word讲义 程序涉及方面广,适合新手入门学习
- aLinux(大三嵌入式).7z
- WebSocket协议:高效实现现代Web应用的实时通信解决方案
- 软件工程实验提交要求.zip
- 基于Javamail的邮件收发系统(系统+论文+开题报告+任务书+外文翻译+文献综述+答辩PPT).zip
- Hive函数应用实例解析:提升数据分析效率
- 软件工程PDF、思维导图、用例图、类图.7z
- 0软件工程期中、期末考.7z
- 通过FTP上传文件到一个或者多个CDN资源
- 宠物的每一帧,请务必和代码放在同一路径下再运行