• 导出模块成员


    使用module.exports对象导出模块成员

    每个模块内部都有一个 module 对象,代表当前模块,我们可以使用它的 exports 属性导出模块成员。该属性的初始值为一个空对象,我们只需要将被导出的成员添加为该对象的属性即可。例如:

     1 // 模块私有的成员
     2 function divide ( x, y ) {
     3     return x / y;
     4 }
     5 
     6 function multiply ( x, y ) {
     7     return x * y;
     8 }
     9 
    10 // 如果我们想导出某个成员的话,只需要将它添加为 module.exports 对象的属性即可。
    11 // 模块导出的成员
    12 module.exports.add = function (x, y) {
    13     return x + y;
    14 };
    15 
    16 module.exports.subtract = function (x, y) {
    17     return x - y;
    18 };

    使用module.exports的别名:exports对象

    为了方便导出模块成员,Node.js为每个模块提供了一个exports对象,exports对象的初始值与module.exports对象的初始值相同,也就是说exports对象与module.exports对象指向同一个对象。我们可以用如下代码解释:

    1 var exports = module.exports = {}

    这样一来,我们就可以直接使用exports对象导出模块成员,如下所示:

    1 exports.add = function (x, y) {
    2     return x + y;
    3 };
    4 
    5 exports.subtract = function (x, y) {
    6     return x - y;
    7 };

    一次导出多个成员

    上面的两种导出方式每次只能导出一个成员,如果我们想一次导出多个成员,则可以使用一个包含要导出成员的新对象替换module.exports属性来的值(空对象)。

     1 function add (x, y) {
     2     return x + y;
     3 }
     4 
     5 function subtract (x, y) {
     6     return x - y;
     7 }
     8 
     9 module.exports = {
    10   add,
    11   subtract
    12 };

    module.exports属性的值改变之后,exports对象的值并不会随着改变,此时两者不再指向同一个对象。Node.js规定只有module.exports对象中的成员会被导出,因此exports对象失去了导出模块成员的功能。

    // 使用一个新对象替换module.exports属性来的对象
    module.exports = {
        add,
        subtract
    };
    
    // exports对象失去了导出模块成员的功能,此处导出模块成员失败。
    exports.multiply = multiply;
    
    // 1. exports对象的初始值与module.exports对象相同,指向同一个空对象。
    // 2. module.exports属性的值改变之后,exports对象的值并不会随着改变,还指向原来的空对象。
    // 3. 由于只有module.exports对象中的成员会被导出,因此向exports对象添加的成员不会被导出。
    // 简而言之,module.exports 指向哪个对象,哪个对象中的成员就会被导出

    但是我们可以让exports对象重新指向module.exports对象,从而让exports对象再次具有导出模块成员的功能。

    1 exports = module.exports = {
    2   add,
    3   subtract
    4 };
    5 
    6 // 由于exports对象与module.exports再次指向同一个对象,因此下面的导出语句成功
    7 exports.multiply = multiply;
  • 相关阅读:
    JVM常用参数设置
    Jstat在分析java的内存GC时的应用
    jstack来分析linux服务器上Java应用服务性能异常
    linux 远程连接服务器ftp命令整理
    LR11中webservice协议的性能测试应用
    Windbg在.net性能问题排查hang情况的应用思路
    Windbg基本命令应用总结
    LR11直接对数据库访问操作方法在性能测试中的应用总结
    BenchmarkSQL v5.0测试达梦数据库
    SSH登录时间久,登录后报错:'abrt-cli status' timed out
  • 原文地址:https://www.cnblogs.com/wszzj/p/12049510.html
Copyright © 2020-2023  润新知