nodeJs中exports和module.exports的区别

exports作用主要是导出共有的对象供其它模块来调用,在这一点上二者作用是类似的。

其实,准确意义上来讲,exports是Module.exports的辅助用法,通过下面的例子进行说明,部分代码是copy过来的。

exports.sayHello = function() {
    console.log('Hello, world ');
};

将上面的js文件保存起来,比如叫做hello.js

然后在其它的地方就可以引用这个hello.js中的函数name了,这里hello.js就已经扮演着模块的作用。

var hello = require('./hello.js');
hello.sayHello(); //Hello, world


exports所做的事情是收集属性,exports只是module.exports的辅助方法。你的模块最终返回module.exports给调用者,而不是exports。如果module.exports当前没有任何属性的话,exports会把这些属性赋予module.exports。如果module.exports已经存在一些属性的话,那么exports中所用的东西都会被忽略。

还是上面的例子,如果在hello.js中新增如下内容,还是按照之前的方式调用:

module.exports = "welcome";
exports.sayHello = function() {
    console.log('Hello, world ');
};
调用hello.js这个模块:

var hello = require('./hello.js');
hello.sayHello(); //此时会报错,没有sayHello这个方法。

模块可以是任何合法的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)修改为其他的。






  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值