node.js中module.exports与exports

   日期:2020-05-16     浏览:107    评论:0    
核心提示:区别Module.exports才是真正的接口,exports只不过是它的一个辅助工具。简单的来说exports 用于挂属性(常量或者属性)上去到module 最终返回给调用的是Module.exports而不是exports。所有的exports收集到的属性和方法,都赋值给了Module.exports。当然,这有个前提,就是Module.exports本身不具备任何属性和方法。如果,Module.exports已经具备一些属性和方法,那么exports收集来的信息将被忽略。//在1.jsexpo

区别

Module.exports才是真正的接口,exports只不过是它的一个辅助工具。简单的来说exports 用于挂属性(常量或者属性)上去到module 最终返回给调用的是Module.exports而不是exports。

所有的exports收集到的属性和方法,都赋值给了Module.exports。当然,这有个前提,就是Module.exports本身不具备任何属性和方法。如果,Module.exports已经具备一些属性和方法,那么exports收集来的信息将被忽略。

//在1.js
exports.money=50
exports.sayHi= function() {
    console.log('Hi,I am dream_wk');
};



//在2.js
var wk= require('./rocker.js');
wk.sayHi(); //Hi,I am dream_wk
consoloe.log(wk.money)//50

从上面就可以看出exports其实就是挂属性在对象上,在require进文件后,我们可以在其他文件直接使用该对象的属性

//错误示范
//在1.js
module.exports = '错误示范';
exports.money=50
exports.sayHi= function() {
    console.log('Hi,I am dream_wk');
};

//在2.js
var wk= require('./1.js');
consoloe.log(wk)
wk.sayHi(); 
consoloe.log(wk.money)//50
//上面会输出 错误示范 四个字
//然后报错

总结

1.exports是module.exports的一个引用

2.require引用模块后,返回给调用者的是module.exports而不是exports

3.exports.xxx,相当于在导出对象上挂属性,该属性对调用模块直接可见

4.exports =相当于给exports对象重新赋值,调用模块不能访问exports对象及其属性(下面代码就是例子)

5.如果此模块是一个类,就应该直接赋值module.exports,这样调用者就是一个类构造器,可以直接new实例

//
//在1.js
exports = "123"
exports.money=50
exports.sayHi= function() {
    console.log('Hi,I am dream_wk');
};

//在2.js
var wk= require('./1.js');
consoloe.log(wk)
wk.sayHi(); 
consoloe.log(wk.money)
//上面会输出 空对象{} 因为在1.js 里面对exports进行了重新定义 所以在2.js文件中require时 并不是将新定义的exports引进去 他还是引进了module 也就是说在1.js中的exports = "123" 使得exports不再是module的一个引用了(也就不可通过exports.money=50去挂载属性在要导出的对象module上 了)

建议

对于要导出的属性,可以简单直接挂到exports对象上 或者也可以像下面这样

//1.js中
module.exports = {
   name:"dream_wk",
   sayHi(){
   console.log("HI")}
};

//2.js中
var wk= require('./1.js');
consoloe.log(wk.name);
wk.sayHi()

对于类,为了直接使导出的内容作为类的构造器可以让调用者使用new操作符创建实例对象,应该把构造函数挂到module.exports对象上,不要和导出属性值混在一起

 
打赏
 本文转载自:网络 
所有权利归属于原作者,如文章来源标示错误或侵犯了您的权利请联系微信13520258486
更多>最近资讯中心
更多>最新资讯中心
更多>相关资讯中心
0相关评论

推荐图文
推荐资讯中心
点击排行
最新信息
新手指南
采购商服务
供应商服务
交易安全
关注我们
手机网站:
新浪微博:
微信关注:

13520258486

周一至周五 9:00-18:00
(其他时间联系在线客服)

24小时在线客服