node.js的module.export 和 export方法的区别
1个回答
2017-11-06 · 百度知道合伙人官方认证企业
育知同创教育
1【专注:Python+人工智能|Java大数据|HTML5培训】 2【免费提供名师直播课堂、公开课及视频教程】 3【地址:北京市昌平区三旗百汇物美大卖场2层,微信公众号:yuzhitc】
向TA提问
关注
展开全部
node.js中module.export与export的区别。
可能是有史以来最简单通俗易懂的有关Module.exports和exports区别的文章了。
exports = module.exports = {}
所以module.exports和exports的区别就是var a={}; var b=a;,a和b的区别
看起来木有什么太大区别,但实际用起来的时候却又有区别,这是为啥呢,请听我细细道来
关于Module.exports和exports有什么区别,网上一搜一大把,但是说的都太复杂了…听说exports是Module.exports对象的一个引用(reference)^1,什么是引用?!…_(:з」∠)_
当然啦,如果要彻底理解这两个导出的区别,最好肯定是去看源码,看看都是怎么封装的,功力深厚的童鞋应该一看就懂了。不过,源码我也是看不懂的…(ಥ_ಥ)
但是最近感觉杂七杂八看了好多文章做了好多实验之后,像是打开了任督二脉,机智的我好像有点上道了…
首先要明确的一点,module是一个对象 {Object}。当你新建一个文件,比如mo.js,文件内容如下:
1 console.log(module)
然后在CMD里执行这个文件node mo.js,就能看到module其实是一个Module实例,你可以这么理解,NodeJS中定义了一个Module类,这个类中有很多属性和方法,exports是其中的一个属性:
12345 function Module { id : 'blabla', exports : {}, blabla...}
当每个js文件在执行或被require的时候,NodeJS其实创建了一个新的实例var module = new Module(),这个实例名叫module。这也就是为什么你并没有定义module这个变量,却能console.log出来而不会报错的原因。
假设我有一个JS文件内容如下:
有了上面的基础,很容易理解module.export其实是给Module实例中的exports对象中添加方法/属性。
通常使用exports的时候,是这么用的:
假设我有一个JS文件内容如下:
由此也能看出,传说中的exports其实是module.exports的引用,你可以这么理解,NodeJS在你的代码之前悄悄的加了以下代码:
这也就是为什么你并没有定义exports这个变量,却能console.log出来而不会报错的原因。
当你从外部调用某个模块,require其实是在require什么?^2require的时候NodeJS会到处去找有没有这个模块,如果有,return的就是module.exports里的东东。
可能是有史以来最简单通俗易懂的有关Module.exports和exports区别的文章了。
exports = module.exports = {}
所以module.exports和exports的区别就是var a={}; var b=a;,a和b的区别
看起来木有什么太大区别,但实际用起来的时候却又有区别,这是为啥呢,请听我细细道来
关于Module.exports和exports有什么区别,网上一搜一大把,但是说的都太复杂了…听说exports是Module.exports对象的一个引用(reference)^1,什么是引用?!…_(:з」∠)_
当然啦,如果要彻底理解这两个导出的区别,最好肯定是去看源码,看看都是怎么封装的,功力深厚的童鞋应该一看就懂了。不过,源码我也是看不懂的…(ಥ_ಥ)
但是最近感觉杂七杂八看了好多文章做了好多实验之后,像是打开了任督二脉,机智的我好像有点上道了…
首先要明确的一点,module是一个对象 {Object}。当你新建一个文件,比如mo.js,文件内容如下:
1 console.log(module)
然后在CMD里执行这个文件node mo.js,就能看到module其实是一个Module实例,你可以这么理解,NodeJS中定义了一个Module类,这个类中有很多属性和方法,exports是其中的一个属性:
12345 function Module { id : 'blabla', exports : {}, blabla...}
当每个js文件在执行或被require的时候,NodeJS其实创建了一个新的实例var module = new Module(),这个实例名叫module。这也就是为什么你并没有定义module这个变量,却能console.log出来而不会报错的原因。
假设我有一个JS文件内容如下:
有了上面的基础,很容易理解module.export其实是给Module实例中的exports对象中添加方法/属性。
通常使用exports的时候,是这么用的:
假设我有一个JS文件内容如下:
由此也能看出,传说中的exports其实是module.exports的引用,你可以这么理解,NodeJS在你的代码之前悄悄的加了以下代码:
这也就是为什么你并没有定义exports这个变量,却能console.log出来而不会报错的原因。
当你从外部调用某个模块,require其实是在require什么?^2require的时候NodeJS会到处去找有没有这个模块,如果有,return的就是module.exports里的东东。
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询