ES6中module模块化开发实例浅析


Posted in Javascript onApril 06, 2017

本文实例讲述了ES6中module模块化开发。分享给大家供大家参考,具体如下:

多人开发JavaScript时伴随着命名冲突等问题,先后有了模拟块级作用域、命名空间、模块化开发等方法。

之前,模块化开发一直是由第三方库来模拟的,比较知名的有AMD规范和CMD规范。

两个规范分别对应requirejs和seajs。

而现在,ES6提出了自己的模块化统一标准。

一个ES6的模块是一个包含了js代码的文件。ES6里没有所谓的module关键字,一个模块就是一个普通的脚本文件,除了以下两个区别:

1. ES6中的模块自动开启严格模式。
2. 模块中可以使用import和export。

导入和导出

我们可以通过import和export关键字将函数或对象导入和导出模块
先来说说export,在模块中声明的任何东西都是默认私有的,如果想对其他模块public,必须将那部分代码export。最简单的方法就是添加一个export关键字:

// kittydar.js
export function detectCats(canvas, options) {
var kittydar = new Kittydar(options);
return kittydar.detectCats(canvas);
}
export class Kittydar {
... several methods doing image processing ...
}
// This helper function isn't exported.
function resizeCanvas() {
...
}
...

不再有跨文件或跨模块的全局变量,export声明的那部分就是这个模块的public API。而在另外一个文件中,我们可以导入这个模块并且使用detectCat方法:

// demo.js - Kittydar demo program
import {detectCats} from "kittydar.js";
function go() {
var canvas = document.getElementById("catpix");
var cats = detectCats(canvas);
drawRectangles(canvas, cats);
}

如果需要导入多个模块中的接口,如下:

import {detectCats, Kittydar} from "kittydar.js";

我们也可以通过一行代码将本模块所有需要public的方法公开:

export {detectCats, Kittydar};

这样就不用一个个地添加export关键字了。

命名冲突

上面介绍了模块中的导入和导出,那么如果导入的变量名和模块中的变量名冲突了应该如何是好呢?放心,ES6允许我们为导入的内容重命名

import {flip as flipOmelet} from "eggs.js";
import {flip as flipHouse} from "real-estate.js";

这样就将从eggs模块来的flip改为了flipOmelet,从real-estate模块来的flip改为了flipHouse,从而避免了冲突。

同样的,我们也可以在模块导出变量名时进行重命名:

function v1() { ... }
function v2() { ... }
export {
v1 as streamV1,
v2 as streamV2,
v2 as streamLatestVersion
};

希望本文所述对大家ECMAScript程序设计有所帮助。

Javascript 相关文章推荐
理解Javascript_06_理解对象的创建过程
Oct 15 Javascript
jQuery 在光标定位的地方插入文字的插件
May 10 Javascript
关于include标签导致js路径找不到的问题分析及解决
Jul 09 Javascript
js中的如何定位固定层的位置
Jun 15 Javascript
Jquery搜索父元素操作方法
Feb 10 Javascript
理解javascript对象继承
Apr 17 Javascript
Jquery 整理元素选取、常用方法一览表
Nov 26 Javascript
详解js中常规日期格式处理、月历渲染和倒计时函数
Dec 28 Javascript
js实现加载页面就自动触发超链接的示例
Aug 31 Javascript
vuex操作state对象的实例代码
Apr 25 Javascript
Javascript删除数组里的某个元素
Feb 28 Javascript
微信小程序实现签字功能
Dec 23 Javascript
ES6中class类用法实例浅析
Apr 06 #Javascript
ES6中Proxy代理用法实例浅析
Apr 06 #Javascript
ES6中Symbol类型用法实例详解
Apr 06 #Javascript
vue中mint-ui环境搭建详细介绍
Apr 06 #Javascript
B/S(Web)实时通讯解决方案分享
Apr 06 #Javascript
HTML中使背景图片自适应浏览器大小实例详解
Apr 06 #Javascript
ES6中的箭头函数实例详解
Apr 06 #Javascript
You might like
php实现阳历阴历互转的方法
2015/10/28 PHP
微信公众号开发之文本消息自动回复php代码
2016/08/08 PHP
php curl上传、下载、https登陆实现代码
2017/07/23 PHP
PHP 进度条函数的简单实例
2017/09/19 PHP
jquery 图片上传按比例预览插件集合
2011/05/28 Javascript
jquery加载页面的方法(页面加载完成就执行)
2011/06/21 Javascript
javascript淡入淡出效果的实现思路
2012/03/31 Javascript
javascript强大的日期函数代码分享
2013/09/04 Javascript
js中substr,substring,indexOf,lastIndexOf的用法小结
2013/12/27 Javascript
一个JavaScript获取元素当前高度的实例
2014/10/29 Javascript
AngularJS中watch监听用法分析
2016/11/04 Javascript
javaScript嗅探执行神器-sniffer.js
2017/02/14 Javascript
解决Vue 浏览器后退无法触发beforeRouteLeave的问题
2017/12/24 Javascript
AngularJS 多指令Scope问题的解决
2018/10/25 Javascript
python批量下载图片的三种方法
2013/04/22 Python
Python实现将罗马数字转换成普通阿拉伯数字的方法
2017/04/19 Python
Python:Scrapy框架中Item Pipeline组件使用详解
2017/12/27 Python
Pandas:DataFrame对象的基础操作方法
2018/06/07 Python
python3利用Socket实现通信的方法示例
2019/05/06 Python
Python MySQLdb 执行sql语句时的参数传递方式
2020/03/04 Python
python 读取二进制 显示图片案例
2020/04/24 Python
Python基于unittest实现测试用例执行
2020/11/25 Python
HTML5 移动页面自适应手机屏幕四类方法总结
2017/08/17 HTML / CSS
男方父母证婚词
2014/01/12 职场文书
结婚周年感言
2014/02/24 职场文书
高中家长寄语
2014/04/02 职场文书
联片教研活动总结
2014/07/01 职场文书
药店促销活动总结
2014/07/10 职场文书
美德少年事迹材料1000字
2014/08/21 职场文书
护士个人年度总结范文
2015/02/13 职场文书
2015年幼儿园班主任工作总结
2015/05/12 职场文书
工伤劳动仲裁代理词
2015/05/25 职场文书
网络新闻该怎么写?这些写作技巧你都知道吗?
2019/08/26 职场文书
《哪吒之魔童降世》观后感:世上哪有随随便便的成功
2019/11/08 职场文书
JavaScript实现简单图片切换
2021/04/29 Javascript
windows系统安装配置nginx环境
2022/06/28 Servers