我是靠谱客的博主 忐忑咖啡豆,最近开发中收集的这篇文章主要介绍NodeJs--module和exports,觉得挺不错的,现在分享给大家,希望可以做个参考。

概述

  1. module.exports

  在js里面,原型和原型链以前困扰我很久,后来慢慢得看得多了也不怎么迷茫了,node里面的module和exports也是一个让我想不通的东西,我之前的纠结点在于module.exports,这个module,每个模块都是module,它们挂在哪?global么.....这不就冲突了吗?今天在腾讯课堂看了一节讲这个的课程,大概没辣么迷茫了,在此记录。

    我们新建一个main.js,然后新建一个module_1.js。在module_1.js里面输入:console.log(module);

输出如下:


我们可以看到module是一个模块对象,其中有它的路径paths,children代表它加载的模块,所以这里也能推断出module不是全挂在global下,是根据父-子一层一层,最顶层就是global.module:


以上属自己推测,若有不对请指正。

    回到我们的module对象,每个模块(此处只说js模块)有一个属性:exports,即module.exports,当我们在其它js里面执行require('module_1'),得到的返回值就是module_1的module.exports。
所以,在module_1.js中,我们定义一个变量a---》
module_1.js 

var a = 100;

module.exports.a_1 = a;//将a通过exports暴露出去,a_1是我们自己定义的对外暴露的变量名

main.js 

var module1 = require('module_1');//返回 module1 即 { a_1 : 100 }

module1.a_1;//100

2. exports

    之前就是module.exports和exports把我弄混了。

    exports是模块作用域下的一个内置对象,它和module.exports指向的是同一个对象。

我们可以测试:

console.log(exports === module.exports);//true

所以我们也可以这样写---》

module_1.js 

var a = 100;

exports.a_1 = a;

 main.js 

var module1 = require('module_1');//返回 module1 即 { a_1 : 100 }

module1.a_1;//100

3.  破坏module.exports和exports指向关系

    本来module.exports和exports指向的是同一个对象,如果我们这样:

var b = 200;

module.exports = [1,2,3];//改变module.exports, 破坏module.exports和exports指向关系。

exports.b_1 = b;

console.log(module.exports);//[1,2,3], 这时候module.exports已经没有b_1了。

console.log(exports);//{b_1 : 200}

同理,把exports= [1,2,3];也会 破坏module.exports和exports指向关系。


最后

以上就是忐忑咖啡豆为你收集整理的NodeJs--module和exports的全部内容,希望文章能够帮你解决NodeJs--module和exports所遇到的程序开发问题。

如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。

本图文内容来源于网友提供,作为学习参考使用,或来自网络收集整理,版权属于原作者所有。
点赞(47)

评论列表共有 0 条评论

立即
投稿
返回
顶部