最近想学学uniapp,里面都是vue,都是js知识,看的有些力不从心,一点点来吧。先学习下模块的概念。

什么是模块?

对es6来说,我个人理解,一个js文件就是一个模块,模块里可以定义很多类,或者函数,供外部使用。

如何定义模块呢?

首先创建一个module.js文件,里面写上

export default function say(name) {
    return '你好,'+name
}

这样,我们就定义好了一个简单的模块,输出一个问候,那么我们如何使用这个模块呢?
在同目录创建一个1.html,然后在里面写上一块js代码,如下

<script type = "module">
    import say from 'module.js'
    console.log(say('nciaer')) // 输出你好,nciaer
</script>

解释下上面的代码,type = "module"这行是必须的,至少是在浏览器里面,否则会报错,这句的意思是把这段当js模块来用,大概是这个意思。
然后就是import say from 'module.js'这行,import from是es6导入模块的语法,from 很容易理解,就是从哪个文件(模块导入),import就是导入什么东西,那么这个say是否可以自定义呢?这里是可以的,因为say函数是默认导出,也就是用export default导出的,所以可以自定义。

导入和导出

上面简单说了导入和导出,这里详细说下,module.js里只能有一个默认导出,可以有很多个普通的导出,或者叫做命名导出?,如

export default function say(name) { // 默认导出,只有一个或者没有
    return '你好,'+name
}

export function hi() { // 命名导出,可多个
    return 'hi'
}

默认导出我们知道如何导入了,那么命名导出如何导入呢?来看个例子

<script type = "module">
    import {hi} from 'module.js'
    console.log(hi()) // 输出 hi
</script>

看了上面的代码,我们知道了命名导出,导入的时候必须用大括号包裹,如果要导入多个的话,用逗号分隔。
但是命名导出如何自定义名称呢?比如我想把hi改成hi2,那就用as,如:import {hi as h2} from 'module.js'

有人说,这样一个一个导入太麻烦了,有啥简单的方法吗?有,那就是用*一股脑的导入,如:

<script type = "module">
    import * as a from 'module.js'
    console.log(a.hi()) // 输出 hi
    console.log(a.default('nciaer')); // 输出你好,nciaer
</script>

a是导入合集的变量,a.default()用来调用默认导出?这个不太确定,实际测试是这样的。

其实也可以这样:import say, {hi} from 'module.js',或者一行一行写,比如:

<script type = "module">
    import say from 'module.js'
    import {hi} from 'module.js'
    console.log(hi()) // 输出 hi
    console.log(say('nciaer')); // 输出你好,nciaer
</script>

现在我们模块里导出都是用多个export,这有点麻烦,其实可以统一导出,如:

function say(name) { // 默认导出,只有一个或者没有
    return '你好,'+name
}

function hi() { // 命名导出,可多个
    return 'hi'
}

export {say as default, hi} // 注意这里,如果想默认导出,用 as default

还有动态导入,但是目前我用不到,所以也没写。

模块

更多推荐内容

评论