nodejs中exports与module.exports的区别详细介绍


Posted in NodeJs onJanuary 14, 2013

你肯定非常熟悉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才是真正的接口,exports只不过是它的一个辅助工具。 最终返回给调用的是Module.exports而不是exports。

所有的exports收集到的属性和方法,都赋值给了Module.exports。当然,这有个前提,就是Module.exports本身不具备任何属性和方法。如果,Module.exports已经具备一些属性和方法,那么exports收集来的信息将被忽略。

修改rocker.js如下:

module.exports = 'ROCK IT!'; 
exports.name = function() { 
console.log('My name is Lemmy Kilmister'); 
};

再次引用执行rocker.js
var rocker = require('./rocker.js'); 
rocker.name(); // TypeError: Object ROCK IT! has no method 'name'

发现报错:对象“ROCK IT!”没有name方法
rocker模块忽略了exports收集的name方法,返回了一个字符串“ROCK IT!”。由此可知,你的模块并不一定非得返回“实例化对象”。你的模块可以是任何合法的javascript对象--boolean, number, date, JSON, string, function, array等等。

你的模块可以是任何你设置给它的东西。如果你没有显式的给Module.exports设置任何属性和方法,那么你的模块就是exports设置给Module.exports的属性。

下面例子中,你的模块是一个类:

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

下面例子中,你的模块是一个数组:
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

现在你明白了,如果你想你的模块是一个特定的类型就用Module.exports。如果你想的模块是一个典型的“实例化对象”就用exports。

给Module.exports添加属性类似于给exports添加属性。例如:

module.exports.name = function() { 
console.log('My name is Lemmy Kilmister'); 
};

同样,exports是这样的
exports.name = function() { 
console.log('My name is Lemmy Kilmister'); 
};

请注意,这两种结果并不想同。前面已经提到module.exports是真正的接口,exports只不过是它的辅助工具。推荐使用exports导出,除非你打算从原来的“实例化对象”改变成一个类型。
NodeJs 相关文章推荐
PHPStorm 2020.1 调试 Nodejs的多种方法详解
Sep 17 NodeJs
nodejs获取本机内网和外网ip地址的实现代码
Jun 01 NodeJs
Nodejs全栈框架StrongLoop推荐
Nov 09 NodeJs
实例详解Nodejs 保存 payload 发送过来的文件
Jan 14 NodeJs
NodeJS创建基础应用并应用模板引擎
Apr 12 NodeJs
nodejs实例解析(输出hello world)
Jan 03 NodeJs
NodeJS链接MySql数据库的操作方法
Jun 27 NodeJs
Nodejs之TCP服务端与客户端聊天程序详解
Jul 07 NodeJs
Nodejs实现文件上传的示例代码
Sep 26 NodeJs
nodejs实现简单的gulp打包
Dec 21 NodeJs
nodejs多版本管理总结
Apr 03 NodeJs
详解nodejs内置模块
May 06 NodeJs
nodejs的require模块(文件模块/核心模块)及路径介绍
Jan 14 #NodeJs
windows系统下简单nodejs安装及环境配置
Jan 08 #NodeJs
NodeJs中的非阻塞方法介绍
Jun 05 #NodeJs
nodejs win7下安装方法
May 24 #NodeJs
NodeJS的模块写法入门(实例代码)
Mar 07 #NodeJs
nodejs入门详解(多篇文章结合)
Mar 07 #NodeJs
NodeJS 模块开发及发布详解分享
Mar 07 #NodeJs
You might like
打造超酷的PHP数据饼图效果实现代码
2011/11/23 PHP
C#使用PHP服务端的Web Service通信实例
2014/04/08 PHP
php使用pdo连接报错Connection failed SQLSTATE的解决方法
2014/12/15 PHP
php基于自定义函数记录log日志方法
2017/07/21 PHP
PHP之认识(二)关于Traits的用法详解
2019/04/11 PHP
laravel 解决路由除了根目录其他都404的问题
2019/10/18 PHP
php下的原生ajax请求用法实例分析
2020/02/28 PHP
Javascript判断对象是否相等实现代码
2013/03/18 Javascript
浅谈checkbox的一些操作(实战经验)
2013/11/20 Javascript
jQuery实现气球弹出框式的侧边导航菜单效果
2015/09/22 Javascript
Javascript简单实现面向对象编程继承实例代码
2015/11/27 Javascript
浅谈jquery.form.js的ajaxSubmit和ajaxForm的使用
2016/09/09 Javascript
Asp.Net之JS生成分页条的方法
2016/11/23 Javascript
jQuery和CSS仿京东仿淘宝列表导航菜单
2017/01/04 Javascript
JS在浏览器中解析Base64编码图像
2017/02/09 Javascript
Vue.js 插件开发详解
2017/03/29 Javascript
Node.js 使用命令行工具检查更新
2017/06/08 Javascript
JS实现按钮控制计时开始和停止功能
2017/07/27 Javascript
微信小程序 wepy框架与iview-weapp的用法详解
2019/04/10 Javascript
使用vue2.6实现抖音【时间轮盘】屏保效果附源码
2019/04/24 Javascript
Vue 实现复制功能,不需要任何结构内容直接复制方式
2019/11/09 Javascript
Python中if __name__ == '__main__'作用解析
2015/06/29 Python
详解Django 时间与时区设置问题
2019/07/23 Python
django如何自己创建一个中间件
2019/07/24 Python
django的auth认证,authenticate和装饰器功能详解
2019/07/25 Python
使用turtle绘制五角星、分形树
2019/10/06 Python
Python结合Window计划任务监测邮件的示例代码
2020/08/05 Python
html5自带表单验证体验优化及提示气泡修改功能
2017/09/12 HTML / CSS
localstorage和sessionstorage使用记录(推荐)
2017/05/23 HTML / CSS
马来西亚网上美容店:Hermo.my
2017/11/25 全球购物
五一家具促销方案
2014/01/10 职场文书
爱的奉献演讲稿
2014/09/10 职场文书
党员群众路线剖析材料
2014/10/08 职场文书
php png失真的原因及解决办法
2021/10/24 PHP
JavaScript实现队列结构过程
2021/12/06 Javascript
MySQL中TIMESTAMP类型返回日期时间数据中带有T的解决
2022/12/24 MySQL