ES6中export通常的用法有两种javascript
就是每个须要输出的数据类型都要有一个name,统一输入必定要带有{}
,即使只有一个须要输出的数据类型。这种写法清爽直观,是推荐的写法。php
//------ 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直接加到声明前面就能够省略{}
html
//------ 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
不管怎样输出,输入的时候都须要{}
。java
当从不一样模块输入的变量名相同的时候node
import {speak} from './cow.js' import {speak} from './goat.js'
这些写法显然会形成混乱git
正确的方法是这样的es6
import {speak as cowSpeak} from './cow.js' import {speak as goatSpeak} from './goat.js'
但是,当从每一个模块须要输入的方法不少的时候,这种写法就显得十分的繁琐、冗长,例如github
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
解决方案就是命名空间导入了api
import * as cow from './cow.js' import * as goat from './goat.js' cow.speak() // moo goat.speak() // baa
十分的简洁优雅ide
默认输出就不须要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
我在github
https://github.com/zhuanyongx...