es6+最佳入门实践(13)
13.模块化
13.1.什么是模块化
模块化是一种处理复杂系统分解为更好的可管理模块的方式。通俗的讲就是把一个复杂的功能拆分成多个小功能,并且以一种良好的机制管理起来,这样就可以认为是模块化。就像作家把书分成很多章节来写一样,程序员写代码分模块来写也是一种良好的习惯。从本质上来讲,一个模块就是一堆代码而已
使用模块化方式写代码,有非常多的优点,例如,可维护性好、避免全局变量污染、可复用性好等,下面我们来看看es5中如何实现模块化封装
var module1 = (function () {
var _count = 0
var fn1 = function () {
alert(_count)
}
var fn2 = function () {
console.log(_count)
}
return {
fn1: fn1,
fn2: fn2
}
})()
module1.fn1() //0
module1.fn2() //0
console.log(module1._count); //undefined
13.2.环境准备
在具体写测试demo之前,我们需要准备一下环境
1.进入到项目目录,初始化项目
npm init -y
2.安装webpack和webpack-cli
npm install webpack webpack-cli -D
这里“-D”是“--save-dev”的简写
3.安装babel
npm install babel-core babel-loader babel-preset-env --save-dev
4.配置babel, 在项目目录下新建.babelrc文件,然后输入
{
"presets": ["env"]
}
4.测试环境是否成功,在项目下新建index.js,写入代码
()=>{console.log(1)}
5.使用webpack打包
./node_modules/.bin/webpack --mode development
13.3.export命令和import命令
模块功能主要由两个命令构成:export和import。export命令用于规定模块的对外接口,import命令用于输入其他模块提供的功能。通俗的讲export用来导出内容,import用来引入内容
1.导出和导入变量
我们新建一个modules目录,在下面新建一个文件a.js写相关代码
//导出变量
let username = 'xiaoqiang'
let password = '123'
export {username, password}
在index.js文件中引入a.js模块代码
//导入变量
import {username,password} from './modules/a.js'
console.log(username, password)
2.导入和导出函数
//导出函数
export function hello() {
return "hello nodeing"
}
//导入函数
import {hello} from './modules/a'
console.log(hello())
3.导入和导出类
//导出一个类
export class hello{
fn(){
console.log('hello world!!!')
}
}
//导入一个类
import {hello} from './modules/a'
console.log(hello)
let obj = new hello()
obj.fn()
注意1: 不要直接导出一个值
export 1 //错误
let m = 20
export m //错误
注意2: 不要直接导出函数或者类
function fn(){}
export fn
class hello{}
export hello
注意3: export语句要在模块最顶层,放在块级作用域内会报错
{
export let a=10 //报错
}
注意4: 可以批量接收导出的内容
//导出变量、函数、类
export class hello{
fn(){
console.log('hello world!!!')
}
}
export let A = 10
export function Fn() {
console.log(111)
}
//批量导入内容,所有的变量 类 函数等都挂载到amodule身上
import * as amodule from './modules/a'
console.log(amodule.A, amodule.Fn, amodule.hello)
13.3.export default命令
从前面的例子中,我们需要思考一个问题,每次使用一个模块的时候,我们都需要知道这个模块里面到底有哪些变量、函数、类,我们要根据这些类名来导入,这样方便么?为了更方便的写代码,我们可以使用export default命令,为模块指定默认输出
//默认输出变量
let a = 10
export default a
注意: 不要写成这样
export default let a = 10 // 报错
//导入模块
import aa from './modules/a'
console.log(aa)
使用export default命令导出,再导入的时候不用加括号{}, 名字可以自定义了
推荐的模块导入导出方式:
//导出内容
let a = 10
function Fn() {
console.log(111)
}
class Hello{
Fn2(){
console.log(111)
}
}
export default {
a,
Fn,
Hello
}
//导入内容
import aa from './modules/a'
console.log(aa)
视频教程地址:http://edu.nodeing.com/course/50
es6+最佳入门实践(13)的更多相关文章
- es6+最佳入门实践(14)
14.模版字符串 模版字符串(template string)是增强版的字符串,定义一个模版字符串需要用到反引号 let s = `这是一个模版字符串` console.log(s) 14.1.模版字 ...
- es6+最佳入门实践(12)
12.class基础用法和继承 12.1.class基础语法 在es5中,面向对象我们通常写成这样 function Person(name,age) { this.name = name; this ...
- es6+最佳入门实践(10)
10.Generator 10.1.Generator是什么? Generator函数是ES6提供的一种异步编程解决方案.在它的内部封装了多个状态,因此,又可以理解为一种状态机,执行Generator ...
- es6+最佳入门实践(9)
9.Iterator和for...of 9.1.Iterator是什么? Iterator又叫做迭代器,它是一种接口,为各种不同的数据结构提供统一的访问机制.这里说的接口可以形象的理解为USB接口,有 ...
- es6+最佳入门实践(8)
8.Promise 8.1.什么是异步? 要理解异步,首先,从同步代码开始说 alert(1) alert(2) 像上面的代码,执行顺序是从上到下,先后弹出1和2,这种代码叫做同步代码 alert(0 ...
- es6+最佳入门实践(7)
7.set和map数据结构 7.1.什么是set? Set就是集合,集合是由一组无序且唯一的项组成,在es6中新增了set这种数据结构,有点类似于数组,但是它的元素是唯一的,没有重复 let st = ...
- es6+最佳入门实践(6)
6.Symbol用法 6.1.什么是Symbol? Symbol是es6中一种新增加的数据类型,它表示独一无二的值.es5中我们把数据类型分为基本数据类型(字符串.数字.布尔.undefined.nu ...
- es6+最佳入门实践(5)
5.对象扩展 5.1.对象简写 在es5中,有这样一种写法 var name = "xiaoqiang"; var age = 12; var obj = { name : nam ...
- es6+最佳入门实践(4)
4.函数扩展 4.1.参数默认值 默认参数就是当用户没有传值的时候函数内部默认使用的值,在es5中我们通过逻辑运算符||来实现 function Fn(a, b) { b = b || "n ...
随机推荐
- java程序——两数的加减乘除
import javax.swing.JOptionPane; // import class JOptionPane public class Elementary { public static ...
- Date()日期函数浏览器兼容问题踩坑
原文:Date()日期函数浏览器兼容问题踩坑 之前用layui做的一项目中,table中用到了日期格式化的问题.直接没多想,撸代码就完了呗,结果最近一段时间客户反馈说显示日期跟录入日期不一样(显示日期 ...
- web框架与爬虫
所有的web框架 http://www.cnblogs.com/wupeiqi/articles/5341480.html 爬虫技术 http://www.cnblogs.com/wupeiqi/ar ...
- 学习SQLite基本语句
SQLite 是一个开源的嵌入式关系数据库,实现自包容.零配置.支持事务的SQL数据库引擎. 其特点是高度便携.使用方便.结构紧凑.高效.可靠. 与其他数据库管理系统不同,SQLite 的安装和运行非 ...
- Delphi实例之绘制正弦函数图像
Delphi实例之绘制正弦函数图像 unit Unit1; interface uses Windows, Messages, SysUtils, Variants, Classes, Graphic ...
- spring 读取properties文件--通过注解方式
问题: 需要通过properties读取页面的所需楼盘的名称.为了以后便于修改. 解决: 可以通过spring的 PropertiesFactoryBean 读取properties属性,就不需要自己 ...
- LeetCode 215——数组中的第 K 个最大元素
1. 题目 在未排序的数组中找到第 k 个最大的元素.请注意,你需要找的是数组排序后的第 k 个最大的元素,而不是第 k 个不同的元素. 示例 1: 输入: [3,2,1,5,6,4] 和 k = 2 ...
- POI实现excel的数据验证
目录 前言 难点1:合并单元格 代码实现策略: step 1: 合并单元格 step 2: 给单元格赋值 难点2:数据验证-下拉框 代码实现策略: step 1:设置需要进行数据验证的单元格范围和可供 ...
- lintcode-92-背包问题
92-背包问题 在n个物品中挑选若干物品装入背包,最多能装多满?假设背包的大小为m,每个物品的大小为A[i] 注意事项 你不可以将物品进行切割. 样例 如果有4个物品[2, 3, 5, 7] 如果背包 ...
- TCP的挥手协议和握手协议2
三次握手协议:三次握手协议的主要过程是交互彼此之间的初始序列号,如果没有确认的ACK帧可以么?肯定是可以的 client A -------> server B client A 发送了自己的初 ...