最近想学学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
还有动态导入,但是目前我用不到,所以也没写。