码农知识堂 - 1000bd
  •   Python
  •   PHP
  •   JS/TS
  •   JAVA
  •   C/C++
  •   C#
  •   GO
  •   Kotlin
  •   Swift
  • Node.js 实战 第2章 Node 编程基础 2.3 用module.exports 微调模块的创建


    Node.js 实战

    文章目录

        • Node.js 实战
        • 第2章 Node 编程基础
          • 2.3 用module.exports 微调模块的创建

    第2章 Node 编程基础

    2.3 用module.exports 微调模块的创建

    尽管用函数和变量组装exports对象能满足大多数的模块创建需要,但有时你可能需要用不同的模型创建该模块。

    比如说,前面创建的那个货币转换器模块可以改成只返回一个Currency构造函数,而不是包含两个函数的对象。

    一个面向对象的实现看起来可能像下面这样:

    const Currency = require('./currency');
    
    const canadianDollar = 0.91;
    const currency = new Currency(canadianDollar);
    console.log(currency.canadianToUS(50));
    
    • 1
    • 2
    • 3
    • 4
    • 5

    如果只需要从模块中得到一个函数,那从 require 中返回一个函数的代码要比返回一个对象的代码更优雅。

    要创建只返回一个变量或函数的模块,你可能会以为只要把 exports设定成你想返回的东西就行。

    但其实这样是不行的,因为Node觉得不能用任何其他对象、函数或变量给exports赋值。

    举个栗子:【一个不能用的模块】

    class Currency{
        constructor(canadianDollar){
            this.canadianDollar = canadianDollar;
        }
    
        roundTwoDecimals(amount){
            return Math.round(amount * 100) / 100;
        }
    
        canadianToUS(canadian){
            return this.roundTwoDecimals(canadian * this.canadianDollar);
        }
    
        USToCanadian(us){
            return this.roundTwoDecimals(us / this.canadianDollar);
        }
    }
    
    exports = Currency;
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19

    在这里插入图片描述

    为了让这个模块可以使用,需要把 exports换成 module.exports。

    用module.exports 可以对外提供单个变量、函数或者对象。

    !注意:如果你创建了一个既有exports 又有 module.exports 的模块,那它只会返回module.exports,而exports 会被忽略。

    这次再执行:

    在这里插入图片描述

    成功了。

    【一个思考】“导出的到底是什么?”

    最终在程序里导出的是module. exports。exports 只是对module.exports的一个全局引用,最初被定义为一个可以添加属性的空对象。exports.myFunc只是module.exports.myFunc的简写。

    所以,如果把 exports设定为别的,就打破了module.exports和exports之间的引用关系。可是因为真正导出的是module.exports,那样exports就不能用了,因为它不再指向module.exports了。如果你想保留那个链接,可以像下面这样让module.exports再次引用exports:

    module.exports = exports = Currency;
    
    • 1

    在这里插入图片描述

    根据需要使用exports 或 module.exports 可以将功能组织成模块,规避掉程序脚本一直增长所带来的弊端。

  • 相关阅读:
    Vue源码学习之异步更新原理
    FastStone Capture
    【云原生 | 27】Docker部署运行开源消息队列实现RabbitMQ
    使用dd命令来构造测试文件
    【JDBC篇】preparedStatement功能介绍
    光伏发电站远程监测无线解决方案,时刻保持电力十足
    使用Docker本地安装部署Drawio绘图工具并实现公网访问
    使用mcl-loadlib实现Python64位调用32位dll
    心律守护 基于机器学习的心脏病预测
    挑战分布式架构,解密Java在业务场景下的高效应用面试题目介绍常用的通信方式有哪些请分别说明各自的特点和适用场景
  • 原文地址:https://blog.csdn.net/weixin_44226181/article/details/127724384
  • 最新文章
  • 【JVM】编译执行与解释执行的区别是什么?JVM 使用哪种方式?
    用 Hashids 优雅解决 C 端自增 ID 暴露问题
    V8引擎 精品漫游指南--Ignition篇(上) 指令 栈帧 槽位 调用约定 内存布局 基础内容
    LLVM Pass快速入门(四):代码插桩
    milkup:桌面端 markdown AI续写和即时渲染
    基于项目工程构建SBOM(软件物料清单)的研究
    鸿蒙应用开发UI基础第二节:鸿蒙应用程序框架核心解析与实操
    .NET 中如何快速实现 List 集合去重?
    扣子Coze实战:从0到1打造抖音+小红书热点监控智能体
    浅谈数据访问层
  • 热门文章
  • 十款代码表白小特效 一个比一个浪漫 赶紧收藏起来吧!!!
    奉劝各位学弟学妹们,该打造你的技术影响力了!
    五年了,我在 CSDN 的两个一百万。
    Java俄罗斯方块,老程序员花了一个周末,连接中学年代!
    面试官都震惊,你这网络基础可以啊!
    你真的会用百度吗?我不信 — 那些不为人知的搜索引擎语法
    心情不好的时候,用 Python 画棵樱花树送给自己吧
    通宵一晚做出来的一款类似CS的第一人称射击游戏Demo!原来做游戏也不是很难,连憨憨学妹都学会了!
    13 万字 C 语言从入门到精通保姆级教程2021 年版
    10行代码集2000张美女图,Python爬虫120例,再上征途
小工具 小游戏
Copyright © 2022 侵权请联系2656653265@qq.com    京ICP备2022015340号-1

京公网安备 11010502049817号