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 相关文章推荐
NodeJS 模块开发及发布详解分享
Mar 07 NodeJs
Nodejs sublime text 3安装与配置
Jun 19 NodeJs
nodejs初步体验篇
Nov 23 NodeJs
nodejs中向HTTP响应传送进程的输出
Mar 19 NodeJs
nodejs模块nodemailer基本使用-邮件发送示例(支持附件)
Mar 28 NodeJs
nodejs实现邮件发送服务实例分享
Mar 29 NodeJs
nodejs个人博客开发第一步 准备工作
Apr 12 NodeJs
基于nodejs 的多页面爬虫实例代码
May 31 NodeJs
nodejs中安装ghost出错的原因及解决方法
Oct 23 NodeJs
nodejs结合socket.io实现websocket通信功能的方法
Jan 12 NodeJs
详解nodejs通过响应回写的方式渲染页面资源
Apr 07 NodeJs
NodeJS安装图文教程
Apr 19 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 get_meta_tags()函数
2014/05/12 PHP
浅析PHP中json_encode与json_decode的区别
2020/07/15 PHP
Javascript 写的简单进度条控件
2008/01/22 Javascript
document.body.scrollTop 值总为0的解决方法 比较常见的标准问题
2009/11/30 Javascript
Javascript 面向对象特性
2009/12/28 Javascript
JS隐藏参数post传值实例
2013/04/18 Javascript
setInterval与clearInterval的使用示例代码
2014/01/28 Javascript
js/jquery判断浏览器类型的方法小结
2015/05/12 Javascript
Bootstrap多级导航栏(级联导航)的实现代码
2016/03/08 Javascript
Jquery UI实现一次拖拽多个选中的元素操作
2020/12/01 Javascript
BootStrop前端框架入门教程详解
2016/12/25 Javascript
nodejs实例解析(输出hello world)
2017/01/03 NodeJs
Bootstrap选项卡学习笔记分享
2017/02/13 Javascript
从零开始学习Node.js系列教程一:http get和post用法分析
2017/04/13 Javascript
react开发教程之React 组件之间的通信方式
2017/08/12 Javascript
详解给Vue2路由导航钩子和axios拦截器做个封装
2018/04/10 Javascript
详解js中的原型,原型对象,原型链
2020/07/16 Javascript
原生JS生成指定位数的验证码
2020/10/28 Javascript
django定期执行任务(实例讲解)
2017/11/03 Python
Python numpy实现数组合并实例(vstack,hstack)
2018/01/09 Python
对python内置map和six.moves.map的区别详解
2018/12/19 Python
详解Python3注释知识点
2019/02/19 Python
python对象销毁实例(垃圾回收)
2020/01/16 Python
python list等分并从等分的子集中随机选取一个数
2020/11/16 Python
canvas学习笔记之绘制简单路径
2019/01/28 HTML / CSS
html5指南-5.使用web storage存储键值对的数据
2013/01/07 HTML / CSS
html5的canvas方法使用指南
2014/12/15 HTML / CSS
意大利奢侈品购物网站:Giglio
2018/01/05 全球购物
.NET常见笔试题集
2012/12/01 面试题
中专药剂专业应届毕的自我评价
2013/12/27 职场文书
小学生开学第一课活动方案
2014/03/27 职场文书
小学生新年寄语
2014/04/03 职场文书
地方白酒代理协议书
2014/10/25 职场文书
我的1919观后感
2015/06/03 职场文书
2015年初中教师个人工作总结
2015/07/21 职场文书
运动会广播稿200字
2015/08/19 职场文书