ES6 模块化编程 详解

简介: ES6新特性 模块化编程详解。

目录

一、基本介绍

二、基本原理示意图

三、传统CommonJS实现模块化编程

       1.介绍 :

       2.实例 :

四、ES6新特性实现模块化编程

       1.介绍 :

       2.实例 :


一、基本介绍

       (1) ES6新特性——模块化编程,用于解决传统非模块化开发中出现的"命名冲突", "文件依赖"等问题。

       (2) 类似于Java中可以引入其他已经写好的模块完成开发,JS也引入了模块化编程;开发者只需要实现核心的业务逻辑即可

       (3) JavaScript中使用"Module"(/ˈmɑːdʒuːl/)来实现模块化编程。


二、基本原理示意图

               在Java中,可以将多个功能相关的.java文件放在同一个包下进行统一管理,比如Java后端三层经典架构(Web层-Service层-DAO层);JS中的模块Module就是类似于这样的一种机制,其目的都是实现“分门别类,各司其职”。

               JS模块化编程的基本原理示意图,如下所示 :

image.gif编辑


三、传统CommonJS实现模块化编程

      1.介绍 :

       (1) CommonJS是一种 JavaScript 语言的模块化规范,它规定每个.js文件就是一个模块,有自己的作用域。在文件中定义的变量、函数、类或对象,都是私有的,对其他.js文件(即其他模块)都不可见

       (2)CommonJS使用格式——

            module.exports = {} / exports = {}导出模块;(首先在要使用的其他模块中写下导出语句)
           
let / const var_name = require("__.js")导入模块。(然后在当前模块中写下导入语句)

       2.实例 :

               定义calculate.js,用来模拟要使用的其他模块,需要在calculate.js文件中定义导出语句。

              calculate.js代码如下 :

//def some variables and constants
let color = "cyan";
const PI = 3.1415926;
const E = 2.71828182;
//The function used to calculate the sum of two numbers
let plus = function (number1, number2) {
    return parseInt(number1) + parseInt(number2);
}
//The function used to calculate the difference of two numbers
let minus = function (number1, number2) {
    return parseInt(number1) - parseInt(number2);
}
//def a object
let blogger = {
    name: "Cyan_RA9",
    age: 21,
    write() {
        console.log("I relish writing blogs.")
    }
}
//export the data of this .js file out(导出模块)
module.exports = {
    plus: plus,
    minus: minus,
    eValue: E,
    PIValue: PI
}
//若导出的名称和本身属性名一致,可以使用ES6新特性———对象简写:
exports = {
    plus,
    minus,
    E,
    PI
}

image.gif

               定义testCalculate.js,用来模拟需要导入其他模块的模块,在testCalculate.js中定义导入语句,导入calculate.js模块。

               testCalculate.js代码如下 :

//import the data of other .js file in(导入模块)
let calculate = require("./calculate");     //默认携带.js尾缀
//亦可以通过解构赋值来导入模块中的部分数据
let { plus } = require("./calculate");
let { color } = require("./calculate");
/*
    导入模块后,通过"名称."的形式来调用,
    类似于JS中对象的调用。
 */
console.log(calculate.plus(11, 5));
console.log(calculate.minus(11, 5));
console.log(plus(11, 5));
console.log(calculate.eValue);
console.log(calculate.PIValue);
console.log(color);
/*
    若IDEA没有报出语法错误,说明导入成功!
    若导入模块失败,使用其他模块中的内容会报错———Missing require() statement
 */

image.gif


四、ES6新特性实现模块化编程

      1.介绍 :

       ES6新特性实现模块化编程,在使用上和传统CommonJS原则一致,都是先写导出语句以导出模块,再写导入语句来导入模块。

       导出模块可以使用三种方式——

       (1)export {}; (2)export 定义名称 = ;(3)export default {};

       导入模块有对应的两种方式——

       (1)import {} from "__.js";(2)import 名称 from "__.js"; [方式(2)主要用于对应第三种导出语句]

       PS :

       1>ES6的模块化无法在Node.js中执行,需要用Babel转码ES5之后再执行。

       2> export可以导出一切JS变量,包括基本类型变量,函数,数组,对象等。

       2.实例 :

               另定义calculate_EX.js,用来模拟要使用的其他模块,需要在calculate_EX.js文件中定义导出语句。

              calculate_EX.js代码如下 :

//define some variables and constants
let symbol = "RA9";
let color = "cyan";
//The function used to calculate the sum of three numbers
let plus = function (number1, number2, number3) {
    return parseInt(number1) + parseInt(number2) + parseInt(number3);
}
//The function used to calculate the difference of two numbers
let minus = function (number1, number2) {
    return parseInt(number1) - parseInt(number2);
}
//def a object
let blogger = {
    name: "Cyan_RA9",
    age: 21,
    write() {
        console.log("I relish writing blogs.")
    }
}
//(1)第一种导出方式———批量导出(可以全部导出,也可以部分导出)
export {
    plus,
    minus,
    blogger,
    color
}
//(2)第二种导出方式———在定义时就直接导出(直接在定义语句前面加上export关键字)
export let divide = function (number1, number2) {
    return number1 / number2;
}
//(3)第三种导出方式———default默认导出
export default {
    multiply(number1, number2) {
        return number1 * number2;
    },
    symbol
}

image.gif

               另定义testCalculate_EX.js,用来模拟需要导入其他模块的模块,在testCalculate_EX.js中定义导入语句,导入calculate_EX.js模块。

               testCalculate_EX.js代码如下 :

//(1) 通过解构赋值的形式导入模块
    // [可以选择性的导入部分数据]
    // [要求导入和导出时的名称一致]
import { blogger } from "./calculate_EX";
console.log(blogger);
//(1) 通过解构赋值的形式导入模块
import {divide} from "./calculate_EX";
console.log(divide(12, 3));
//(2) 通过定义名称的形式导入模块(对应导出模块的default导出语句)
    //该方式可用于解决命名冲突问题
import demoI from "./calculate_EX";
console.log(demoI.symbol);
console.log(demoI.multiply(11, 5));

image.gif

       System.out.println("END-------------------------------------------------------------");

目录
相关文章
|
消息中间件 存储 Kafka
程序员的27大Kafka面试问题及答案
程序员的27大Kafka面试问题及答案
|
存储 自然语言处理 JavaScript
深入理解JS的执行上下文、词法作用域和闭包(上)
深入理解JS的执行上下文、词法作用域和闭包(上)
|
JavaScript 前端开发
umi + antd 动态主题色
这篇文章讲解的是动态主题色的变化,也就是,页面可能会有10种,或者20种颜色需要切换,不知道到底有多少种颜色;同时,文档也考虑到多人协助开发,开发人员只需要按照约定方式去编写样式、主题文件名、目录等命名规范即可。
1879 0
umi + antd 动态主题色
|
6月前
|
存储 数据采集 人工智能
《从0到1:DataWorks搭建人工智能数据湖技术要点全解析》
在数字化转型中,数据成为企业创新的核心动力。阿里巴巴的DataWorks凭借强大的数据集成、开发、治理和运维能力,助力搭建人工智能数据湖。关键要点包括:1) 数据集成:打通多源数据流通,确保实时性和准确性;2) 数据存储与管理:分层存储,优化性能与成本;3) 数据预处理:清洗、转换、规约,提升AI模型训练效果;4) 数据安全与权限管理:加密、访问控制,保障数据安全;5) AI模型开发与应用:支持智能推荐、风险预测等场景,释放数据价值。通过这些技术要点,构建高效、可靠、安全的人工智能数据湖,推动企业数字化转型。
259 4
|
12月前
|
UED
如何通过 Webpack 实现代码分割?
如何通过 Webpack 实现代码分割?
331 0
|
11月前
|
JavaScript 前端开发 Java
VUE学习四:前端模块化,ES6和ES5如何实现模块化
这篇文章介绍了前端模块化的概念,以及如何在ES6和ES5中实现模块化,包括ES6模块化的基本用法、默认导出与混合导出、重命名export和import,以及ES6之前如何通过函数闭包和CommonJS规范实现模块化。
381 0
VUE学习四:前端模块化,ES6和ES5如何实现模块化
|
12月前
|
前端开发
Vue3基础(十si)___引入Element-plus___Vant___全局引入___按需引入___测试打包大小
本文介绍了如何在Vue3项目中引入Element-plus和Vant UI库,包括全局引入和按需引入的方法,并通过配置vite.config.js实现按需引入,最后对比了不同引入方式对项目打包大小的影响。
229 0
Vue3基础(十si)___引入Element-plus___Vant___全局引入___按需引入___测试打包大小
|
SQL 存储 监控
SQLServer事务复制延迟优化之并行(多线程)复制
【9月更文挑战第12天】在SQL Server中,事务复制延迟会影响数据同步性。并行复制可通过多线程处理优化这一问题,提高复制效率。主要优化方法包括:配置分发代理参数、优化网络带宽、调整系统资源、优化数据库设计及定期监控维护。合理实施这些措施可提升数据同步的及时性和可靠性。
351 0
|
JavaScript 前端开发 程序员
Vue2入门(安装Vue、devtools,创建Vue)以及MVVM分层思想
Vue2入门(安装Vue、devtools,创建Vue)以及MVVM分层思想
340 0
|
SQL 前端开发 PHP
【PHP开发专栏】PHP分页功能的设计与实现
【4月更文挑战第29天】本文介绍了PHP实现分页功能,包括设计逻辑(用户界面和后端处理)、SQL查询优化和前端展示。后端通过计算页码和偏移量进行数据查询,前端展示分页信息并处理用户交互。优化点有使用索引、LIMIT语句和避免子查询。此外,还提到了无限滚动、AJAX分页和分页大小选择等高级功能,以提升用户体验。
176 0