当前位置: 首页 > news >正文

ECMAScript6中的模块:export导出、import导入

1、模块概述

早期的 JavaScript 程序很小,通常被用来执行独立的脚本任务,在 Web 页面中需要的地方提供一定的交互。随着 Web 应用程序变得越来越复杂,有必要考虑提供一种将 JavaScript 程序拆分为可按需导入的单独模块的机制,这就是模块化编程。模块化编程就是将一个复杂的程序根据一定的规则封装成一个或多个文件,并组合在一起。使用这种方式,可以将代码分解到多个文件中,每个文件都称为一个模块。一个模块通常是一个类或者多个函数组成的方法库。

每个文件本身就是一个模块,在文件中定义的变量、函数和类对于该文件都是私有的,需要将它们显示导出。另外,一个模块导出的内容只是显示导入它们的模块中才可以使用。ECMAScript 6 为 JavaScript 提供了 export、import 关键字,用于导出和导入模块。

2、export 导出模块

为了获得模块的功能,首先需要把它们导出来。要从 ES6 模块中导出变量、函数或类,需要使用 export 语句。最简单的方法是将 export 语句放在想要导出的项前面。

【实例】创建一个模块 module.js,模块中定义一个变量、一个函数和一个类,并使用  export 语句进行导出。

//1、导出:变量
export var name = "张三";//2、导出:函数
export function sum(m, n) {return m + n;
}//3、导出:类
export class Person {constructor(name, position, year) {this.name = name;this.position = position;this.year = year;}show() {return "姓名:" + this.name + "\n职位:" + this.position + "\n工作年限:" + this.year;}
}

如果不想使用多个 export 关键字进行导出,可以先正常定义变量、函数和类,然后在模块末尾使用一个 export 语句声明想要导出的内容。这种语法要求在一对大括号中给出一个使用逗号分隔的标识符列表。

【实例】将上述代码进行修改,在模块末尾使用一个 export 语句进行导出。

//1、定义:变量
var name = "张三";//2、定义:函数
function sum(m, n){ return m + n;
}//3、定义:类
class Person{constructor(name, position, year) {this.name = name;this.position = position;this.year = year;}show(){return "姓名:" + this.name + "\n职位:" + this.position + "\n工作年限:" + this.year;}
}//使用 export 语句导出:变量、函数、类
export {name, sum, Person};

在使用 export 语句进行导出时,可以使用 as 关键字对导出的标识符进行重命名。

【实例】将上述代码进行修改,使用 as 关键字对导出的标识符进行重命名。

//使用 export 语句导出时,并使用 as 关键字对导出的标识符进行重命名
export {name as n, sum as s, Person as p};

在有些情况下,如果只想导出模块中的一个函数或类,可以使用默认导出的形式,即 export default 语句。

【实例】使用 export default 语句,只导出模块中的 sum() 函数。

// 方式一:使用 export default 语句,只导出模块中的 sum() 函数
export default sum;

使用 export 语句只能导出已经命名的变量、函数或类。而使用 export default 语句的默认导出则可以导出任意表达式,包括匿名函数。

【实例】使用 export default 语句和匿名函数的形式,导出匿名函数。

// 方式二:使用 export default 语句和匿名函数的形式,导出匿名函数
export default function(m, n){ return m + n;
}

说明:

一个模块只能有一个默认导出,因此 export default 在一个模块中只能使用一次。

3、import 导入模块

如果想在模块外面使用模块中的一些功能,就需要进行导入。导入其他模块导出的内容需要使用 import 语句来实现。

【实例】使用 import 语句入到 module.js 模块导出的内容。

import {name, sum, Person} from './module.js';

在使用 import 语句进行导入时,也可以使用 as 关键字对导入的标识符进行重命名。

import {name as n, sum as s, Person as p} from './module.js';

可以使用通配符“*”将每一个模块功能导入到一个模块功能对象上。

import * as obj from './module.js';

如果导入默认导出的内容,可以使用 default 关键字并提供别名进行导入,也可以直接使用自定义的标识符作为默认导出的别名进行导入。

import {default as exam} from './module.js';

 或者:

import exam from './module.js';

4、基于 Vue3.0 综合实例

在企业项目中,通常会使用 Vue 作为前端开发框架。以下是一个基于 Vue3.0 的综合实例,实现员工模块的开发。

(1)创建 staff.js 文件,实现员工API模块功能,并导出方法。

import request from '@/utils/request.js';//获取员工信息
export function getStaffInfoById(staffId) {return request({url: `/staff/getStaffInfoById/${staffId}`,method: 'GET'});
}//新增或保存员工信息
export function saveOrUpdateStaff(staffInfo) {return request({url: '/staff/saveOrUpdateStaff',method: 'POST',data: staffInfo});
}//删除员工信息
export function deleteStaff(staffId) {return request({url: `/staff/deleteStaff/${staffId}`,method: 'POST'});
}

(2)创建 StaffInfo.Vue 文件,编写一个单文件组件,实现获取员工信息。

<template><!-- 忽略:组件的HTML内容 -->
</template><script>
// 导入模块:将 staff.js 中的所需要的函数导入到该组件中
import { getStaffInfoById, saveOrUpdateStaff, deleteStaff } from '@/api/staff.js';
import { getDepartmentList } from '@/api/department.js';
import { getPositionList } from '@/api/position.js';export default {data: function () {return {staffId: 0,staffInfo: {},}},created() {this.staffId = this.$route.query.staffId || 0; //获取路由中传递的员工IDthis.getStaffInfo(this.staffId); //页面绑定员工信息},methods: {//页面绑定员工信息bindStaffInfo: function (staffId) {//调用导入的函数getStaffInfoById(staffId).then(function (data) {this.staffInfo = data;}.bind(this));},//删除员工信息deleteStaff: function (staffId) {if (!confirm("确定删除该记录吗?")) {return;}//调用导入的函数deleteStaff(staffId).then(function (result) {if (result) {alert("删除成功");}}.bind(this));}}
}
</script>

相关文章:

ECMAScript6中的模块:export导出、import导入

1、模块概述 早期的 JavaScript 程序很小&#xff0c;通常被用来执行独立的脚本任务&#xff0c;在 Web 页面中需要的地方提供一定的交互。随着 Web 应用程序变得越来越复杂&#xff0c;有必要考虑提供一种将 JavaScript 程序拆分为可按需导入的单独模块的机制&#xff0c;这就…...

mysql写个分区表

因为表量已经达到1个亿了。现在想做个优化&#xff0c;先按照 create_time 时间进行分区吧。 create_time 是varchar类型。 CREATE TABLE orders (id varchar(40) NOT NULL ,order_no VARCHAR(20) NOT NULL,create_time VARCHAR(20) NOT NULL,amount DECIMAL(10,2) NOT NULL,…...

Hystrix——服务容错保护库

熔断机制是解决微服务架构中因等待出现故障的依赖方响应而形成任务挤压&#xff0c;最终导致自身服务瘫痪的一种机制&#xff0c;它的功能类似电路的保险丝&#xff0c;其目的是为了阻断故障&#xff0c;从而保护系统稳定性。Hystrix作为Spring Cloud中实现了熔断机制的组件&am…...

【区块链+金融服务】河北股权交易所综合金融服务平台 | FISCO BCOS应用案例

区域性股权市场是我国资本市场的重要组成部分&#xff0c;是多层次资本市场体系的基石。河北股权交易所&#xff08;简称&#xff1a;河交所&#xff09; 作为河北省唯一一家区域性股权市场运营机构&#xff0c;打造河北股权交易所综合金融服务平台&#xff0c;将区块链技术与区…...

[图解]需要≠需求-《分析模式》漫谈

1 00:00:00,760 --> 00:00:02,910 今天的《分析模式》漫谈 2 00:00:02,920 --> 00:00:04,180 我们来说一下 3 00:00:04,490 --> 00:00:06,490 需要不等于需求 4 00:00:10,490 --> 00:00:11,760 还是第一章 5 00:00:13,120 --> 00:00:15,020 这里 6 00:00:1…...

刷到好听的音频怎么办

在短视频平台上&#xff0c;我们常常会刷到那些好听得让人陶醉的视频&#xff0c;可却无法直接下载保存其中的音频&#xff0c;是不是感觉很遗憾&#xff1f; 比如刷到林俊杰这首前奏超好听的《江南》&#xff0c;却禁止下载无法直接下载保存。 别担心&#xff0c;下面就为您揭…...

怎么在网络攻击中屹立不倒

在当今蓬勃发展的网络游戏产业中&#xff0c;服务器安全无疑是企业生存与发展的基石。面对互联网环境中无处不在的DDoS&#xff08;分布式拒绝服务&#xff09;与CC&#xff08;挑战碰撞&#xff09;攻击威胁&#xff0c;游戏服务器的防御能力与高效处理能力显得尤为重要。相较…...

详解 Python 中的面向对象编程(2)

引言 面向对象编程&#xff08;OOP&#xff09;是一种编程范式&#xff0c;它通过将属性和行为整合到对象中来构建程序。本教程将带你了解Python语言中面向对象编程的基本概念。 想象一下&#xff0c;对象就像是系统中的各个部件。可以把程序比作一条工厂流水线。在流水线的每一…...

数据结构-线性表-顺序表

一. 了解顺序表 顺序表定义&#xff1a; 顺序表&#xff08;也称为线性数组&#xff09;是一种线性数据结构&#xff0c;它将数据元素按顺序存储在一块连续的内存空间中。顺序表的基本特征包括&#xff1a; 元素的顺序性&#xff1a;顺序表中的元素具有线性关系&#xff0c;每…...

AI绘画大模型-StableDiffusion最强模型sd3(本地安装方法)

​ 前言/introduction Stable Diffusion 3&#xff08;简称SD3&#xff09;是Stability AI最新推出的文本到图像生成模型。相比前代模型&#xff0c;SD3在生成质量、细节表现以及运行效率上有了显著提升&#xff0c;尤其在细腻的图像渲染和复杂的场景构建方面表现出色。SD3模型…...

SpringBoot调用外部接口的几种方式

SpringBoot调用外部接口的几种方式 使用FeignClient调用1、在使用方引入依赖2、服务接口调用方2.1、在启动类上加上EnableFeigncliens注解2.2、编写Feign接口调用服务controller层2.3、服务接口调用service层 3、服务接口提供者4、说明 使用RestTemplate调用1、引入依赖2、Rest…...

MySQL:information_schema查找某个表的主键是否在数据的其他位置出现之二

上一篇&#xff1a; MySQL&#xff1a;information_schema查找某个表的主键是否在数据的其他位置出现之一-CSDN博客 摘要 遍历数据库每一张表的每一个字段&#xff0c;是否存在字符串search_term 正文 源码 import pymysql from datetime import datetime# 测试函数 if __n…...

Linux进程和计划任务管理

目录 一、进程基本概念 1.进程 2.程序和进程的关系 二、查看进程信息 1.ps命令 1.1 ps aux命令 1.2 ps -elf 命令 2. top 命令 3.pgrep 命令 4.jobs 命令 三、查看进程树 四、进程的启动方式 1.手动启动 2.调度启动 五、终止进程的运行 1.CtrlC组合键 2.kill、kil…...

【Angular18】封装自定义组件

1. 准备组件 2. 创建打包文件夹及部分配置文件 创建 文件夹app-legalentities-root拷贝组件源文件到新的文件夹app-legalentities中创建文件 .npmrc registry发布地址always-authtrue创建文件 ng-package.json {"$schema": "./node_modules/ng-packagr/ng-pac…...

【流媒体】RTMPDump—RTMP_ConnectStream(创建流连接)

目录 1. RTMP_ConnectStream函数1.1 读取packet&#xff08;RTMP_ReadPacket&#xff09;1.2 解析packet&#xff08;RTMP_ClientPacket&#xff09;1.2.1 设置Chunk Size&#xff08;HandleChangeChunkSize&#xff09;1.2.2 用户控制信息&#xff08;HandleCtrl&#xff09;1…...

MySQL学习3之锁机制

一、什么是锁粒度&#xff1f; 锁粒度&#xff08;Lock Granularity&#xff09;是指在数据库中锁定数据资源的最小单位。锁粒度决定了锁定操作的范围&#xff0c;即锁定的是整个数据库、整个表、表中的某个分区、表中的某一页还是表中的某一行。 在MySQL中常见的锁粒度有&am…...

2004-2023年上市公司过度负债数据(含原始数据+计算结果)

2004-2023年上市公司过度负债数据&#xff08;含原始数据计算结果&#xff09; 1、时间&#xff1a;2004-2023年 2、来源&#xff1a;上市公司年报 3、指标&#xff1a;证券代码、证券简称、统计截止日期、是否剔除ST或*ST股、是否剔除当年新上市、已经退市或被暂停退市的公…...

[机器学习]--KNN算法(K邻近算法)

KNN (K-Nearest Neihbor,KNN)K近邻是机器学习算法中理论最简单,最好理解的算法,是一个 非常适合入门的算法,拥有如下特性: 思想极度简单,应用数学知识少(近乎为零),对于很多不擅长数学的小伙伴十分友好虽然算法简单,但效果也不错 KNN算法原理 上图是每一个点都是一个肿瘤病例…...

跨平台控制神器Escrcpy,您的智能生活助手

Escrcpy 是一款基于 Scrcpy 开发的图形化安卓手机投屏控制软件&#xff0c;它允许用户将 Android 手机屏幕实时镜像到电脑上&#xff0c;并使用电脑的鼠标和键盘直接操作手机&#xff0c;实现了无线且高效的操控。这款软件是免费开源的&#xff0c;支持跨平台使用&#xff0c;包…...

AR 眼镜之-开关机定制-实现方案

目录 &#x1f4c2; 前言 AR 眼镜系统版本 开关机定制 1. &#x1f531; 技术方案 1.1 技术方案概述 1.2 实现方案 1&#xff09;开机 Logo 2&#xff09;开机音效 3&#xff09;开机动画 4&#xff09;关机动画 5&#xff09;关机弹窗 2. &#x1f4a0; 开机 Logo…...

Win11下VMware保姆级安装指南:从许可证到CentOS镜像下载全流程

Win11下VMware与CentOS镜像高效部署实战手册 开篇&#xff1a;为什么选择VMwareCentOS组合&#xff1f; 刚接触虚拟化技术的开发者常面临一个关键抉择&#xff1a;如何在本地快速搭建稳定的Linux开发环境&#xff1f;VMware Workstation作为桌面虚拟化领域的标杆工具&#xff0…...

短效与动态代理IP区别,从定义边界讲清

很多用户在选用代理IP时&#xff0c;常常混淆短效代理IP和动态代理IP&#xff0c;甚至将两者等同看待&#xff0c;导致选型失误、业务受阻。其实两者属于包含与被包含的关系&#xff0c;核心区别体现在定义边界与核心定位上&#xff0c;只有理清这一底层逻辑&#xff0c;才能精…...

别再手动写ZPL了!用C#和斑马官方SDK搞定ZT410 RFID打印机(附中文乱码解决方案)

用C#驱动斑马ZT410 RFID打印机&#xff1a;从基础连接到中文打印实战 斑马ZT410 RFID打印机在物流、零售和资产管理领域应用广泛&#xff0c;但许多开发者仍停留在手动拼接ZPL指令的原始阶段。这种工作方式不仅效率低下&#xff0c;还容易因指令格式错误导致打印失败或RFID写入…...

3分钟掌握视频转PPT终极技巧:快速提取幻灯片内容

3分钟掌握视频转PPT终极技巧&#xff1a;快速提取幻灯片内容 【免费下载链接】extract-video-ppt extract the ppt in the video 项目地址: https://gitcode.com/gh_mirrors/ex/extract-video-ppt 还在为会议录屏中的PPT幻灯片提取而烦恼吗&#xff1f;extract-video-pp…...

HDLC(高级数据链路控制):从帧结构解析到C语言模拟实现

1. HDLC协议基础&#xff1a;从比特流到可靠传输 第一次接触HDLC协议时&#xff0c;我盯着那串01111110的标志位发了半天呆——这不就是个简单的比特序列吗&#xff1f;怎么就能成为整个协议的基础&#xff1f;后来在调试卫星通信模块时才发现&#xff0c;正是这个看似简单的设…...

智能配置黑苹果:三步快速部署OpenCore自动化工具终极指南

智能配置黑苹果&#xff1a;三步快速部署OpenCore自动化工具终极指南 【免费下载链接】OpCore-Simplify A tool designed to simplify the creation of OpenCore EFI 项目地址: https://gitcode.com/GitHub_Trending/op/OpCore-Simplify 还在为黑苹果复杂的EFI配置而头疼…...

2026年全国青少年信息素养大赛算法应用主题赛(C++赛项初赛模拟题)

2026年全国青少年信息素养大赛算法应用主题赛&#xff08;C赛项初赛模拟题&#xff09; 一、单项选择题&#xff08;共 15 题&#xff0c;每题 5 分&#xff09; 1. 数组下标与长征物资 题目内容 你需要记录红军某运输队一周&#xff08;7 天&#xff09;的粮食消耗量&#x…...

如何快速使用LivePortrait实现AI肖像动画:终极指南

如何快速使用LivePortrait实现AI肖像动画&#xff1a;终极指南 【免费下载链接】LivePortrait Bring portraits to life! 项目地址: https://gitcode.com/GitHub_Trending/li/LivePortrait LivePortrait 是一款革命性的AI肖像动画工具&#xff0c;能够将静态照片转化为栩…...

COMSOL:模拟多尺度扩散模型下的流体运动与浆液扩散

COMSOL COMSOL模拟不同扩散模型下煤粒吸附/解吸扩 散 comsol仿真模拟电双层纳米电极&#xff0c;扩散双电层耦 合了Nernst-Planck方程和泊松方程。 comsol二 氧化碳混相驱替&#xff0c;多孔介质驱替&#xff0c;油气&#xff0c;扩散&#xff0c; 考虑浓度变化&#xff0c;速度…...

2026年3月28日技术资讯洞察:5G-A边缘计算落地、低延迟AI推理革命与工业智造新范式

今日核心要点5G-A无线大上行技术突破&#xff1a;中国电信展示1Gbps上行峰值速率&#xff0c;为Mobile AI时代奠定网络基础低延迟推理革命全面爆发&#xff1a;黄仁勋发布LPU架构&#xff0c;AI响应从秒级迈入毫秒级时代智能驾驶进入规模化试点&#xff1a;L3级自动驾驶在限定路…...