[JavaScript] ES6模塊

(1)命名式導(dǎo)出

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

//相當(dāng)于
//export {constsqrt, square, diag};
//main.js
import {square, diag} from 'lib';    //只導(dǎo)入square和diag
console.log(square(11));    //121
console.log(diag(3, 4));    //5

(2)導(dǎo)入整個(gè)模塊

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

注:
方括號(hào)語法也是可以的,lib['square'](11)

(3)默認(rèn)導(dǎo)出

導(dǎo)出函數(shù):

//myFunc.js
export default function(){};
//main.js
import abc from 'myFunc';    //導(dǎo)入"默認(rèn)導(dǎo)出"不用加花括號(hào){abc}

導(dǎo)出類:

//MyClass.js
export default class {};
//main.js
import ABC from 'MyClass';    //導(dǎo)入"默認(rèn)導(dǎo)出"不用加花括號(hào){ABC}

注:
默認(rèn)導(dǎo)出一般是沒有名字的,默認(rèn)導(dǎo)出的操作數(shù)應(yīng)該是表達(dá)式。

(4)同時(shí)進(jìn)行命名導(dǎo)出和默認(rèn)導(dǎo)出

//underscore.js
export default function(obj){};
export function each(obj,iterator,context){};
export { each as forEach };
//main.js
import _, { forEach } from 'underscore';    //花括號(hào)外接收的是"默認(rèn)導(dǎo)出",花括號(hào)內(nèi)的是"命名導(dǎo)出"

注:
默認(rèn)導(dǎo)出不過是一種命名為default的導(dǎo)出方式。

export default 123;
<=> 
const D = 123;
export { D as default };
import foo from 'lib';
<=>
import { default as foo } from 'lib';

(5)總結(jié),導(dǎo)入方式

對(duì)于默認(rèn)導(dǎo)出和命名導(dǎo)出

import theDefault, { named1, named2 } from 'src/mylib';
import theDefault from 'src/mylib';
import { named1, named2 } from 'src/mylib';

更名

import { named1 as myNamed1, named2 } from 'src/mylib';

導(dǎo)入整個(gè)模塊

import * as mylib from 'src/mylib';

只載入模塊,不導(dǎo)入任何東西

import 'src/mylib';

(6)總結(jié),導(dǎo)出方式

命名導(dǎo)出

export var myVar1=...;
export let myVar2=...;
export const MY_CONST=...;
export function myFunc(){};
export function* myGeneratorFunc(){};
export class MyClass(){};

默認(rèn)導(dǎo)出

export default 123;
export default function(){};
export default x=>x;
export default class{};

模塊末尾導(dǎo)出

const MY_CONST=...;
function myFunc(){}

export { MY_CONST, myFunc };

更名

export { MY_CONST as THE_CONST, myFunc as theFunc };

導(dǎo)出引用

export * from 'src/other_module';
export { foo, bar } from 'src/other_module';
export { foo as myFoo, bar } from 'src/other_module';

(7)動(dòng)態(tài)導(dǎo)入

System.import('some_module')
    .then(some_module=>{
        //use the module
    })
    .catch(error=>{

    });

注:
System.import只能讀取單個(gè)模塊,可以使用Promise.all導(dǎo)入多個(gè)模塊。

Promise.all(['module1', 'module2', 'module3'].map(x=>System.import(x)))
    .then(([module1, module2, module3])=>{
        //use module1, module2, module3
    });
最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請(qǐng)結(jié)合常識(shí)與多方信息審慎甄別。
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡(jiǎn)書系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

  • Android 自定義View的各種姿勢(shì)1 Activity的顯示之ViewRootImpl詳解 Activity...
    passiontim閱讀 178,872評(píng)論 25 709
  • 官方中文版原文鏈接 感謝社區(qū)中各位的大力支持,譯者再次奉上一點(diǎn)點(diǎn)福利:阿里云產(chǎn)品券,享受所有官網(wǎng)優(yōu)惠,并抽取幸運(yùn)大...
    HetfieldJoe閱讀 3,720評(píng)論 2 27
  • Spring Cloud為開發(fā)人員提供了快速構(gòu)建分布式系統(tǒng)中一些常見模式的工具(例如配置管理,服務(wù)發(fā)現(xiàn),斷路器,智...
    卡卡羅2017閱讀 136,533評(píng)論 19 139
  • 1、 什么是Activity 2、 介紹一下Mainifest 、 MainActivity 、Layout Ma...
    AKyS佐毅閱讀 940評(píng)論 0 0
  • 正式寫作第一天20170731晴 老師的第一節(jié)課是為什么要寫作?至于我,最主要的是我能夠用語言文字工具來表達(dá)自己,...
    熊阿丑閱讀 375評(píng)論 0 0

友情鏈接更多精彩內(nèi)容