zoukankan      html  css  js  c++  java
  • exports 和 module.exports

    (1)exports和module.exports的作用都是将文件模块里面的方法和属性暴露给require返回的对象进行调用,区别就是exports暴露的方法和属性都可以被module.exports替代,因为exports是给module.exports添加属性和方法

    1 //test.js
    2 exports.name = '我是exports暴露的name';
    3 exports.method = function(){
    4     console.log('我是exports暴露的method');
    5 }
    6 console.log(module.exports);
    1 //同一目录下的index.js
    2 var obj = require('./test.js');
    3 console.log(obj);

      两个console.log的结果都是一样的,为{ name: '我是exports暴露的name', method: [Function] },证明exports确实是为module.exports对象添加方法和属性
    如果同时出现exports和module.exports并且同时暴露相同的方法和属性,后者会覆盖前者。

    (2)exports返回的是一个json对象,而module.exports可以返回任何形式的数据格式,例如数组,字符串,数字等类型时,我们必须要用module.exports,下面是用module.exports返回一个字符串

    1 //test.js
    2 module.exports = '我是module.exports暴露的字符串';
    3 exports.name = '我是exports暴露的name';
    4 exports.method = function(){
    5     console.log('我是exports暴露的method');
    6 };
    7 console.log("\n\n************我是console.log(exports)的结果***************")
    8 console.log(exports);
    1 //同一目录下的different.js
    2 var obj = require('./test.js');
    3 console.log("\n\n************我是console.log(module.exports)的结果**********");
    4 console.log(module.exports);
    5 console.log("\n\n************我是console.log(obj)的结果*****************");
    6 console.log(obj);

    执行结果如下:

      证明exports暴露的属性name和方法method都失效了,笔者在《Node.js开发实战详解》书中查找的解释是说“在exports之前执行了module.exports方法,导致exports失效”,由module.exports暴露出来的字符串并不能添加到module.exports对象中去,但是可以返回给require得到的对象

    (3)一般来说,exports和module.exports的成员为公有成员,而非exports和module.exports的成员则为私有成员。这个是很容易理解,相信大家都明白

  • 相关阅读:
    Coalesce (MS SQL Server)——取指定内容(列)中第一个不为空的值
    SQL 函数NULLIF、NULL、ISNULL、COALESCE、IIF
    oracle 分组后取每组第一条数据
    oracle判断是否包含字符串的方法
    Oracle 查询字段不包含多个字符串方法
    [oracle] to_date() 与 to_char() 日期和字符串转换
    Oracle中保留两位小数
    Oracle 树操作、递归查询(select…start with…connect by…prior)
    联合查询更新表数据
    WCF 之 生成元数据和代理
  • 原文地址:https://www.cnblogs.com/DTBelieve/p/5347835.html
Copyright © 2011-2022 走看看