nodejs中module.exports和exports.xx的区别

通过node.js的exports对象,我们可以创建自己喜欢的模块,那么,在模块化中,module.exports和exports.xx有什么区别呢?exports对象为模块提供了公开的接口,通过require可以获取到这个接口,然而,module.exports才是模块真正的接口,exports只不过是它的一个辅助工具,最终返回给调用的都是module.exports。

如果我们使用module.exports,得到的模块将是一个特定的类型,如果使用exports.xx,得到的模块是一个实例化对象,如下:

在一个名为calculate.js的文件中,使用exports.xx导出模块,有如下代码:

function add(a,b) {

    console.log(a + b);
}
exports.add = add;
我们得到一名为add的模块,如若使用它,可以在index,js中添加代码:

var calculate = require('./calculate');

calculate.add(1,3);
通过node index.js运行文件,可以看到终端上输出了结果为:4.


如果是要用module.exports,则calculate.js中代码改为:

function add(a,b) {

    console.log(a + b);
}
module.exports = add;
index.js中调用模块的代码改为:

var calculate = require('./calculate');

calculate(1,3);
运行结果与使用exports.xx的结果相同。

一般,像这种导出的模块为单独的function功能(一个实例化对象)的情况下,推荐使用exports.xx。

如果导出的模块为一个特定的类型,比如calculate类包含了很多的计算方法,推荐使用module.exports。如:

calculate.js中定义一可以执行加减乘除操作的类:

function calculate(a, b) {
    this.add = function() {
        console.log(a + b);
    };
    this.sub = function() {
        console.log(a - b);
    };
    this.mul = function() {
        console.log(a * b);
    };
    this.div = function() {
        console.log(a / b);
    };
}

module.exports = calculate;
此时导出的模块为特定的类,可以在index.js中通过实例化该类调用它里面定义的的方法:

var calculate = require('./calculate');

var cal = new calculate(1,3);
cal.add();
cal.sub();
cal.mul();
cal.div();


  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值