13.es6的模块化实现

1,859 阅读1分钟

es6的模块功能主要由两个命令构成:exportimport
export用于规定模块的对外接口,import用于输入其它模块提供的功能。

自定义模块:

//modules目录下的index.js文件
export const name = 'tom';
export const age = '18';

export function getName() {
    return `my name is ${name}`;
}

注意: 抛出函数的时候不能先定义函数之后再抛出函数名。
错误写法:

function getName() {
    return `my name is ${name}`;
}
export getName();

正确写法:

export const name = 'tom';
export const age = '18';

export function getName() {
    return `my name is ${name}`;
}
//或者
const name = 'tom';
const age = '18';

function getName() {
    return `my name is ${name}`;
}

export {name, age, getName};

引用自定义模块:

注意: 引用模块时,script标签上一定要加上type="module"

<script type="module">
    import {name, age, getName} from './modules/index.js';

    console.log(name);//tom
    console.log(age);//18
    console.log(getName());//my name is tom
</script>

export default

一个模块中可以有多个export,但是export default只能有一个。使用 export default导出,在引入时可以随便命名,但是它也必须单独写在导入时的{} 之外,且只能写在{}前面。

const name = 'tom';
const age = '18';

function getName() {
    return `my name is ${name}`;
}

export {name, age, getName};

const obj = {
    fun: 'fun'
};

export default obj;
<script type="module">
    //export default obj;给它命名为a
    import a, {name, age, getName} from './modules/index.js';

    console.log(name);
    console.log(age);
    console.log(getName());
    console.log(a);//{fun: "fun"}
</script>

有时候我们希望一次引入模块中的所有

<script type="module">
    import * as module1 from './modules/index.js';

    console.log(module1);//Module {Symbol(Symbol.toStringTag): "Module"}
    console.log(module1.name);//tom
    console.log(module1.age);//18
    console.log(module1.getName());//my name is tom
    console.log(module1.default);//{fun: "fun"}
</script>

导入类

class Person {
    constructor() {

    }

    getName() {
        return 'tom';
    }
}

export default Person;
<script type="module">
    import Person from './modules/index.js';

    console.log(Person);/*class Person {
    constructor() {

    }

    getName() {
        return 'tom';
    }
    }*/
    let p = new Person();
    console.log(p.getName());//tom
</script>