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

export和import的用法总结

ES6中export一般的用法有两种

  1. 命名导出(Named exports)
  2. 默认导出(Default exports)

命名导出(Named exports)

就是每一个需要输出的数据类型都要有一个name,统一输入一定要带有{},即便只有一个需要输出的数据类型。这种写法清爽直观,是推荐的写法。

//------ lib.js ------
const sqrt = Math.sqrt;
function square(x) {
    return x * x;
}
function diag(x, y) {
    return sqrt(square(x) + square(y));
}

export {sqrt, square, diag}

//------ main.js ------
import { square, diag } from 'lib';                
console.log(square(11)); // 121
console.log(diag(4, 3)); // 5

把export直接加到声明前面就可以省略{}

//------ lib.js ------
export const sqrt = Math.sqrt;
export function square(x) {
    return x * x;
}
export function diag(x, y) {
    return sqrt(square(x) + square(y));
}

//------ main.js ------
import { square, diag } from 'lib';                
console.log(square(11)); // 121
console.log(diag(4, 3)); // 5

无论怎样输出,输入的时候都需要{}

别名导入(Aliasing named imports)

当从不同模块输入的变量名相同的时候

import {speak} from './cow.js'
import {speak} from './goat.js'    

这些写法显然会造成混乱

正确的方法是这样的

import {speak as cowSpeak} from './cow.js'
import {speak as goatSpeak} from './goat.js'

可是,当从每个模块需要输入的方法很多的时候,这种写法就显得十分的繁琐、冗长,例如

import {
  speak as cowSpeak,
  eat as cowEat,
  drink as cowDrink
} from './cow.js'

import {
  speak as goatSpeak,
  eat as goatEat,
  drink as goatDrink
} from './goat.js'

cowSpeak() // moo
cowEat() // cow eats
goatSpeak() // baa
goatDrink() // goat drinks

解决方案就是命名空间导入了

命名空间导入(Namespace imports)
import * as cow from './cow.js'
import * as goat from './goat.js'

cow.speak() // moo
goat.speak() // baa

十分的简洁优雅

默认导出(Default exports)

默认输出就不需要name了,但是一个js文件中只能有一个export default。

//------ myFunc.js ------
export default function () { ... };

//------ main1.js ------
import myFunc from 'myFunc';
myFunc();

其实这种导出方式可以看成是命名导出的变种,只不过把命名写成了default。

虽然export default只能有一个,但也可以输出多个方法。

export default {
  speak () {
    return 'moo'
  },
  eat () {
    return 'cow eats'
  },
  drink () {
    return 'cow drinks'
  }
}

输入与命名空间输入类似

import cow from './default-cow.js'
import goat from './default-goat.js'

cow.speak() // moo
goat.speak() // baa

如果我们在编写模块的时候使用的输出方法不统一,那么引入的时候就需要考虑不同模块输入的方式。这种麻烦可以通过自引用的方法消除。方法如下

编写两种输入方式通用的模块

import * as myself from './ambidextrous-cow.js' // import this file into itself

// this module's own namespace is its default export
export default myself

export function speak () {
  console.log('moo')
}

这样在输入的时候就不需要考虑输入方式了。

import cow from './ambidextrous-cow'
import * as alsocow from './ambidextrous-cow'

cow.speak() // moo
alsocow.speak() // moo

两种输入方法均可。

这种方法也有一个小缺点,就是在我们编写的模块中,有一个function是常用的,我们想默认输出,可export default已经使用了,而我们知道export default在一个模块中只能使用一次。这时就要使用Object.assign

import * as myself from './ambidextrous-cow.js' 

export default Object.assign(speak, myself) 

export function speak () {
  console.log('moo')
}

需要注意的是,Object.assign只能用于function。

对应输入的例子

import cow from './ambidextrous-cow'
import * as alsocow from './ambidextrous-cow'

cow() // moo
cow.speak() // moo
alsocow.speak() // moo

参考文章

1.[es6] import, export, default cheatsheet

2.详解JavaScript ES6中export import与export default的用法和区别

3.ES Modules: Using named exports as the default export

4.export in MDN

我在github
https://github.com/zhuanyongx...

相关文章:

  • Picasso源码阅读笔记九
  • 《Python编程快速上手》第8.9.2实践练习
  • Intel发布P4500、P4600 NVMe SSD:规格释疑
  • Gradle:Gradle入门
  • 超简便安装mysql
  • 个人开发—进度记录(十)
  • 【技巧】从键盘读入一串字符并输出
  • [转] Webpack 打包优化之体积篇
  • Java并发编程实战系列16之Java内存模型(JMM)
  • [20180224]expdp query 写法问题.txt
  • Android SDK Manager 和 AVD Manager使用
  • Ubuntu 开机挂载分区
  • SQL自动审核工具archer
  • django生产环节部署
  • 设计模式 代理模式(Proxy)
  • #Java异常处理
  • 【跃迁之路】【733天】程序员高效学习方法论探索系列(实验阶段490-2019.2.23)...
  • 2017-08-04 前端日报
  • CentOS从零开始部署Nodejs项目
  • Electron入门介绍
  • ES10 特性的完整指南
  • export和import的用法总结
  • iOS仿今日头条、壁纸应用、筛选分类、三方微博、颜色填充等源码
  • Java应用性能调优
  • SpringBoot几种定时任务的实现方式
  • ucore操作系统实验笔记 - 重新理解中断
  • underscore源码剖析之整体架构
  • 测试如何在敏捷团队中工作?
  • 关于List、List?、ListObject的区别
  • 欢迎参加第二届中国游戏开发者大会
  • 猫头鹰的深夜翻译:Java 2D Graphics, 简单的仿射变换
  • 如何解决微信端直接跳WAP端
  • 使用阿里云发布分布式网站,开发时候应该注意什么?
  • 算法---两个栈实现一个队列
  • 我的面试准备过程--容器(更新中)
  • 一道闭包题引发的思考
  • 一起来学SpringBoot | 第十篇:使用Spring Cache集成Redis
  • - 转 Ext2.0 form使用实例
  • raise 与 raise ... from 的区别
  • ​一、什么是射频识别?二、射频识别系统组成及工作原理三、射频识别系统分类四、RFID与物联网​
  • #pragma pack(1)
  • #前后端分离# 头条发布系统
  • $HTTP_POST_VARS['']和$_POST['']的区别
  • (+3)1.3敏捷宣言与敏捷过程的特点
  • (2009.11版)《网络管理员考试 考前冲刺预测卷及考点解析》复习重点
  • (C)一些题4
  • (C语言)共用体union的用法举例
  • (Matalb时序预测)WOA-BP鲸鱼算法优化BP神经网络的多维时序回归预测
  • (NO.00004)iOS实现打砖块游戏(十二):伸缩自如,我是如意金箍棒(上)!
  • (补)B+树一些思想
  • (二)fiber的基本认识
  • (附源码)node.js知识分享网站 毕业设计 202038
  • (附源码)计算机毕业设计SSM智慧停车系统
  • (六)vue-router+UI组件库
  • (免费领源码)Java#Springboot#mysql农产品销售管理系统47627-计算机毕业设计项目选题推荐