Node.js中exports与module.exports的区别
2016-12-23 15:36
621 查看
原文:http://www.hacksparrow.com/node-js-exports-vs-module-exports.html
你肯定对
然后你在另一个文件中调用:
但是
令人吃惊的是-
把下面的内容放到
然后把下面的内容放到另一个文件中,执行它:
rocker模块完全忽略了
在下面的情况下,你的模块是一个类:
然后你应该这样使用它:
在下面的情况下,你的模块是一个数组:
然后你应该这样使用它:
现在你应该找到要点了 - 如果你想要你的模块成为一个特别的对象类型,那么使用
把属性赋予
下面这个做的是一样的事情:
但是请注意,它们并不是一样的东西。就像我之前说的
你肯定对
Node.js模块中用来创建函数的
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的辅助方法。你的模块最终返回
module.exports给调用者,而不是
exports。
exports所做的事情是收集属性,如果
module.exports当前没有任何属性的话,
exports会把这些属性赋予
module.exports。如果
module.exports已经存在一些属性的话,那么
exports中所用的东西都会被忽略。
把下面的内容放到
rocker.js:
module.exports = 'ROCK IT!';
exports.name = function() { console.log('My name is Lemmy Kilmister'); };
然后把下面的内容放到另一个文件中,执行它:
var rocker = require('./rocker.js'); rocker.name(); // TypeError: Object ROCK IT! has no method 'name'
rocker模块完全忽略了
exports.name,然后返回了一个字符串’ROCK IT!’。通过上面的例子,你可能认识到你的模块不一定非得是模块实例(module instances)。你的模块可以是任何合法的JavaScript对象 - boolean,number,date,JSON, string,function,array和其他。你的模块可以是任何你赋予
module.exports的值。如果你没有明确的给
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;如果你希望你的模块成为一个传统的
模块实例(module instance),使用
exports。
把属性赋予
module.exports的结果与把属性赋予给
exports是一样的。看下面这个例子:
module.exports.name = function() { console.log('My name is Lemmy Kilmister'); };
下面这个做的是一样的事情:
exports.name = function() { console.log('My name is Lemmy Kilmister'); };
但是请注意,它们并不是一样的东西。就像我之前说的
module.exports是真实存在的东西,
exports只是它的辅助方法。话虽如此,
exports还是推荐的对象,除非你想把你模块 的对象类型从传统的
模块实例(module instance)修改为其他的。
相关文章推荐
- 理解inode
- Node.js : Using Promises with mongoosejs
- 使用 Node.js 的优势和劣势都有哪些?
- nodejs数据持久化(一)
- Ionic2环境配置
- Node.js入门到精通(8)事件循环
- 深入express,用express搭建路由
- 学习笔记:window7环境下的nodejs与npm安装。
- 学习笔记:window7环境下的nodejs与npm安装。
- 详解nodejs 文本操作模块-fs模块(五)
- nodeji框架express
- Node.js利用Net模块实现多人命令行聊天室的方法
- NodeJS模拟request请求
- C#学习经典方法之(八)---XmlNode.OuterXml属性
- 使用端口转发解决nodejs在80端口上的监听权限问题
- Node.js 学习过程总结(二)之网页解析
- 安装node-sass提示没有vendor目录的解决办法
- Nodebb论坛学习汇总
- 利用Node.js的Net模块实现一个命令行多人聊天室
- NODE中异步之间的协作