你肯定非常熟悉nodejs模块中的exports对象,你可以用它创建你的模块。例如:(假设这是rocker.js文件) 代码如下: exports.name = function() { console.log(‘My name is Lemmy Kilmister’); }; 在另一个文件中你这样引用 代码如下: var rocker = require(‘./rocker.js’); rocker.name(); // ‘My name is Lemmy Kilmister’ 那到底Module.exports是什么呢?它是否合法呢? 其实,Module.exports才是真正的接 在Node.js环境中,模块系统是核心特性之一,用于组织代码并实现代码重用。当我们谈论模块的导出机制时,通常会遇到两个关键对象:`exports`和`module.exports`。虽然初学者可能会认为它们是一样的,但实际上它们之间存在微妙的区别。 `exports`是一个快捷方式,它实际上是`module.exports`的一个引用。在默认情况下,`exports`和`module.exports`指向同一个空对象,因此,当你在模块中通过`exports`添加属性或方法时,这些改动也会反映到`module.exports`上。例如,在`rocker.js`文件中: ```javascript exports.name = function() { console.log('My name is Lemmy Kilmister'); }; ``` 然后在其他文件中引用这个模块: ```javascript var rocker = require('./rocker.js'); rocker.name(); // 'My name is Lemmy Kilmister' ``` 然而,`module.exports`才是真正的出口,决定最终返回给调用者的对象。如果`module.exports`被重新赋值,`exports`的快捷方式将不再有效。这意味着任何通过`exports`添加的属性或方法都将被忽略。比如: ```javascript module.exports = 'ROCK IT!'; exports.name = function() { console.log('My name is Lemmy Kilmister'); }; ``` 当尝试引用`rocker.js`时: ```javascript var rocker = require('./rocker.js'); rocker.name(); // TypeError: Object ROCK IT! has no method 'name' ``` 在这个例子中,模块返回了一个字符串"ROCK IT!",而不是之前定义的函数,因为`module.exports`被直接赋值了。 理解这一点非常重要,因为它允许我们灵活地导出任意JavaScript对象,如函数、类、数组、JSON等。例如,我们可以导出一个类: ```javascript module.exports = function(name, age) { this.name = name; this.age = age; this.about = function() { console.log(this.name + ' is ' + this.age + ' years old'); }; }; // 使用 var Rocker = require('./rocker.js'); var r = new Rocker('Ozzy', 62); r.about(); // Ozzy is 62 years old ``` 或者一个数组: ```javascript module.exports = ['Lemmy Kilmister', 'Ozzy Osbourne', 'Ronnie James Dio', 'Steven Tyler', 'Mick Jagger']; // 使用 var rocker = require('./rocker.js'); console.log('Rockin in heaven: ' + rocker[2]); // Rockin in heaven: Ronnie James Dio ``` 虽然`exports`和`module.exports`的使用方式看起来相似,但要注意它们之间的区别。如果你想要导出一个非默认的、特定类型的值,比如一个类或数组,你应该直接操作`module.exports`。而通常情况下,使用`exports`来添加属性和方法更加方便,除非你需要覆盖原有的导出对象,这时直接使用`module.exports`会更合适。 总结来说,Node.js模块系统中的`exports`和`module.exports`是相互关联的,但`module.exports`具有更高的优先级,它是实际对外暴露的对象。`exports`作为快捷方式,适用于简单场景,而复杂情况应直接操作`module.exports`以确保导出正确的内容。






























- 粉丝: 3
我的内容管理 展开
我的资源 快来上传第一个资源
我的收益
登录查看自己的收益我的积分 登录查看自己的积分
我的C币 登录后查看C币余额
我的收藏
我的下载
下载帮助


最新资源
- 移动互联网时代高职院校学生心理危机预防与干预初探.docx
- Ruckus整体网络解决方案.docx
- (源码)基于Arduino技术的云端之舞艺术装置.zip
- 大数据背景下的高校教学管理工作初探.docx
- 自考操作系统复习资料大全.doc
- 企业网络信息安全保护措施探讨与实践.doc
- 2017继续教育物联网技术与应用题目与标准答案(最全).docx
- 单片机用于电子密码锁设计方案.doc
- 计算机技术在计量测试中的应用.docx
- 21世纪计算机技术在档案管理中的应用综述.docx
- 合理利用网络资源全面提高教学水平.doc
- 有关电力工程中电气自动化探析.doc
- 计算机基础习题参考答案.doc
- 磁芯的选型(自动化专业工程实践必备).doc
- (源码)基于CC1310的3轴SubG长距离运动追踪器.zip
- 《软件项目管理》复试卷及试卷完整答案完整精华免费.doc


