最近在看《node开发实战详解》时有写疑问,所以自己就整理了一些资料。下面是node4.*的官方api文档(http://nodejs.cn/doc/node_4/modules.html#modules_module_exports),我有点看不懂,就拉出node.10*的官方api(https://nodejs.org/dist/v0.10.9/docs/api/modules.html#modules_module_exports)。

module.exports与exports的介绍

module.exports与exports都是将函数或者是方法暴露出去,require的时候进行调用,但是2者是有区别的。以下是代码:

//ex.js

exports='danhuangmode';

//mex.js

module.exports='danhuangmode';

//call_ex_mex.js

var ex=require('./ex');
  var mex=require('./mex');

console.log(ex);
  console.log('\n');
  console.log(mex);

执行结果:

引用exports提供方法,输出是为一个对象,引用module.exports提供方法,输出为字符串。

exports内部提供接口,在外部引用时之间的关系如何?

exports内部处理暴露方法,是如何处理的,看如下代码:

var string='this is in exports.js';

 function ex_fn () {
console.log('this in funtion ex_fn');
} var exobj={
str1:"str1 exobj",
exobjfn: function () {
console.log("in function");
}
}; exports.string=string;
exports.ex_fn=ex_fn;
exports.exobj=exobj;
exports=exobj;

调用代码:

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

console.log(ex.string);
console.log(ex.ex_fn);
console.log(ex.exobj);
console.log(ex);

结果显示:

exports提供的所有接口,直接调用导出实例化的接口对象,会显示接口对象中所有提供的类型、函数、对象以及对象中的方法和对象。

module.exports对外提供接口如何处理?

//mex.js

var ex_fn= function () {
console.log('this in funtion ex_fn');
} module.exports=ex_fn;

调用代码mex.js:

//引用mex.js

var ex=require('./mex');
ex();
console.log(ex);

 

执行结果为:

直接将函数作为返回。

再看下面一个例子:

var person={
name :"person's name",
age :20,
getAge: function () {
return this.age;
}
} module.exports = person;

调用的代码:

var person=require('./modulex');

console.log(person.name);
console.log(person.age);
console.log(person.getAge());
console.log(person);

显示的结果为:

返回为一个json对象,可以直接调用内部的函数、属性。

module.exports 与exports是什么关系?

module.exports = 'personname';

exports.name=function  () {
console.log('this is person name');
}

调用 的脚本:

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

console.log(person);
console.log(person.name);

执行结果:

personname
undefined

结果:

其实真正的接口是module.exports,exports是一个辅助工具。最终返回到是module.exports,而不是exports。

当module.exports没有任何属性和方法,exports将收集的所有信息都传递给module.exports,如果module.exports已经具有了属性和方法,exports所搜集的信息将会被忽略。

最新文章

  1. Windows7SP1补丁包(Win7补丁汇总) 32位/64位版 更新截至2016年11月
  2. java_Excel 导出
  3. nginx配置文件简单说明
  4. [nRF51822] 5、 霸屏了——详解nRF51 SDK中的GPIOTE(从GPIO电平变化到产生中断事件的流程详解)
  5. Ngui 五种点击事件实现方式及在3d场景中点透的情况
  6. 【转】Image Cyborg 一键下载存储网页所有图片
  7. hdu3397 线段树 成段更新
  8. input hidden用法
  9. bzoj1912
  10. perl学习(9) 实例:取出操作时间最长的100个记录
  11. 玩一把JS的链式调用
  12. 南天PR2、PR2E驱动下载,xp,win7,win8,win8.1,win10 32位64位驱动下载安装教程
  13. bzoj 1084;vijos 1191 [SCOI2005] 最大子矩阵
  14. POJ - 1456 贪心+并查集
  15. 同步pod时区与node主机保持一致
  16. python(31)——【sys模块】【json模块 & pickle模块】
  17. 用Redis作Mysql数据库缓存
  18. linux命令行打包、压缩及解压缩
  19. QMYSQL driver not loaded
  20. bzoj 4912: [Sdoi2017]天才黑客

热门文章

  1. codeforces D. Multiplication Table
  2. 最完整的合并相交集合的Java代码(查并集)
  3. Android 正则表达式匹配汉字中文
  4. 【HDOJ】3549 Flow Problem
  5. HDwiki文件上传导致远程代码执行漏洞
  6. Node.js权威指南 (9) - 进程与子进程
  7. [回顾]SVE回顾
  8. JavaScript高级程序设计19.pdf
  9. [转载]css hack
  10. Service的两种启动方法