node.js中module.exports分析

在node中我们为了实现模块化,会经常遇到这样的情况:一个文件中需要引用另一个文件中的某些function或者对象等(使用require() ),同时这个文件里面的某些function或者对象又会被其他地方给引用(使用model.exports或者exports)。

通常在一个文件里面有两个可用的用来暴露函数或者对象等的对象:module.exports、exports,一般用前者更好,在文章的最后将说明他们的区别。

这里就涉及到模块化的思想。在我再这里就简单的说一下怎么用。

module.exports

如果想在一个文件中暴露本文件的变量或者函数等可以在文件的最后使用module.exports。module是一个对象,像下面给出的代码一样。

var module = {
    id: 'hello',
    exports: {}
};

例子:

module.exports={key:value}    //相当于暴露一个对象出去
module.exports.key = value    
module.exports=function name(){}  //暴露一个函数或者数组

require()

在一个文件中可以使用require()来引用另一个文件中的中暴露出来的函数或者变量等。

例子:

var hello = require('文件所在位置')
注意此时引用到的是一个对象或者数组或者函数,具体看在另一个文件中使用module.exports暴露的是一个对象还是数组函数函数,如果是对象使用对象的访问方式去访问里面的属性,数组和函数也使用相应的访问方式使用。

module.exports和exports的区别

module的样子在前面已经列出来了。其实exports就是module.exports的引用。但是exports不能暴露函数和数组。也就是不能像下面这样暴露。
exports = function name(){}

可以像下面这样理解:

把exports看成是对module.exports的引用,可以用exports.foo往里面增加新的属性,但是如果直接对exports赋值,exports的指向改变,exports就不再是module.exports的引用了,所以moudule.exports仍然为空对象{}。

前面的例子中就是相当于函数返回一个新的引用,改变了exports的指向。


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值