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 相关文章推荐
js获取某月的最后一天日期的简单实例
Jun 22 Javascript
JS中判断null、undefined与NaN的方法
Mar 24 Javascript
禁用Tab键JS代码兼容Firefox和IE
Apr 18 Javascript
JS变量中有var定义和无var定义的区别以及es6中let命令和const命令
Feb 19 Javascript
让微信小程序支持ES6中Promise特性的方法详解
Jun 13 Javascript
微信小程序将字符串生成二维码图片的操作方法
Jul 17 Javascript
Vue 组件参数校验与非props特性的方法
Feb 12 Javascript
JavaScript实现滑动门效果
Jan 18 Javascript
解决echarts vue数据更新,视图不更新问题(echarts嵌在vue弹框中)
Jul 20 Javascript
JS实现多功能计算器
Oct 28 Javascript
Vue h函数的使用详解
Feb 18 Vue.js
vue数据字典取键值项目的字典问题
Apr 12 Vue.js
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
欧美媒体选出10年前最流行的17部动画
2017/01/18 日漫
PHP的FTP学习(二)[转自奥索]
2006/10/09 PHP
php中使用parse_url()对网址进行解析的实现代码(parse_url详解)
2012/01/03 PHP
php微信公众号开发模式详解
2016/11/28 PHP
Yii框架数据模型的验证规则rules()被执行的方法
2016/12/02 PHP
JavaScript语言中的Literal Syntax特性分析
2007/03/08 Javascript
js innerHTML 的一些问题的解决方法
2008/06/22 Javascript
基于jQuery试卷自动排版系统
2010/07/18 Javascript
JSON序列化与解析原生JS方法且IE6和chrome测试通过
2013/09/05 Javascript
Jquery实现侧边栏跟随滚动条固定(兼容IE6)
2014/04/02 Javascript
JavaScript定义类和对象的方法
2014/11/26 Javascript
jQuery中fadeOut()方法用法实例
2014/12/24 Javascript
thinkphp 表名 大小写 窍门
2015/02/01 Javascript
JS实现无缝循环marquee滚动效果
2017/05/22 Javascript
微信小程序canvas写字板效果及实例
2017/06/15 Javascript
jQuery实现表单动态加减、ajax表单提交功能
2018/06/08 jQuery
详解微信小程序网络请求接口封装实例
2019/05/02 Javascript
13 个npm 快速开发技巧(推荐)
2019/07/04 Javascript
vue登录注册实例详解
2019/09/14 Javascript
html2canvas属性和使用方法以及如何使用html2canvas将HTML内容写入Canvas生成图片
2020/01/12 Javascript
在webstorm中配置less的方法详解
2020/09/25 Javascript
Python中使用item()方法遍历字典的例子
2014/08/26 Python
Python读取properties配置文件操作示例
2018/03/29 Python
用python统计代码行的示例(包括空行和注释)
2018/07/24 Python
python实现月食效果实例代码
2019/06/18 Python
django框架两个使用模板实例
2019/12/11 Python
pycharm不能运行.py文件的解决方法
2020/02/12 Python
Python3.7 读取音频根据文件名生成脚本的代码
2020/04/07 Python
Python matplotlib画图时图例说明(legend)放到图像外侧详解
2020/05/16 Python
Python如何设置指定窗口为前台活动窗口
2020/08/12 Python
豪华床上用品、床单和浴室必需品:Peacock Alley
2019/09/04 全球购物
公益活动邀请函
2014/02/05 职场文书
宿舍保安职务说明书
2014/02/25 职场文书
文艺演出策划方案
2014/06/07 职场文书
商业用房租赁协议书
2014/10/13 职场文书
捐书活动倡议书
2015/04/27 职场文书