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 相关文章推荐
如何判断图片地址是否失效
Feb 02 Javascript
基于JQuery 滑动与动画的说明介绍
Apr 18 Javascript
微信小程序 常用工具类详解及实例
Feb 15 Javascript
jQuery图片瀑布流的简单实现代码
Mar 15 Javascript
es6学习笔记之Async函数的使用示例
May 11 Javascript
js+canvas实现验证码功能
Sep 21 Javascript
微信小程序之swiper滑动面板用法示例
Dec 04 Javascript
微信小程序登录按钮遮罩浮层效果的实现方法
Dec 16 Javascript
SSM+layUI 根据登录信息显示不同的页面方法
Sep 20 Javascript
js实现从右往左匀速显示图片(无缝轮播)
Jun 29 Javascript
Javascript节流函数throttle和防抖函数debounce
Dec 03 Javascript
swiperjs实现导航与tab页的联动
Dec 13 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中用foreach来操作数组的代码
2011/07/17 PHP
PHP实现简单爬虫的方法
2015/07/29 PHP
php禁用cookie后session设置方法分析
2016/10/19 PHP
Laravel find in set排序实例
2019/10/09 PHP
JavaScript写的一个DIV 弹出网页对话框
2009/08/14 Javascript
jquery下拉select控件操作方法分享(jquery操作select)
2014/03/25 Javascript
js/jquery判断浏览器的方法小结
2014/09/02 Javascript
利用a标签自动解析URL分析网址实例
2014/10/20 Javascript
JavaScript中rem布局在react中的应用
2015/12/09 Javascript
Jquery对新插入的节点 绑定Click事件失效的解决方法
2016/06/02 Javascript
浅析vue给不同环境配置不同打包命令
2018/08/17 Javascript
JavaScript函数Call、Apply原理实例解析
2020/02/17 Javascript
JavaScript 如何在浏览器中使用摄像头
2020/12/02 Javascript
Python中还原JavaScript的escape函数编码后字符串的方法
2014/08/22 Python
Python实现的数据结构与算法之链表详解
2015/04/22 Python
python类继承用法实例分析
2015/05/27 Python
Mac中Python 3环境下安装scrapy的方法教程
2017/10/26 Python
python 简单搭建阻塞式单进程,多进程,多线程服务的实例
2017/11/01 Python
Python 多核并行计算的示例代码
2017/11/07 Python
tensorflow TFRecords文件的生成和读取的方法
2018/02/06 Python
python 重定向获取真实url的方法
2018/05/11 Python
Python判断字符串是否xx开始或结尾的示例
2019/08/08 Python
使用Python获取当前工作目录和执行命令的位置
2020/03/09 Python
利用jupyter网页版本进行python函数查询方式
2020/04/14 Python
python实现人性化显示金额数字实例详解
2020/09/25 Python
Kathmandu澳洲户外商店:新西兰户外运动品牌
2017/11/12 全球购物
长曲棍球装备:Lacrosse Monkey
2020/12/02 全球购物
俄罗斯极限运动网上商店:Board Shop №1
2020/12/18 全球购物
西部世纪面试题
2014/12/05 面试题
英文版餐饮业求职信
2013/10/18 职场文书
四下基层实施方案
2014/03/28 职场文书
生日宴会策划方案
2014/06/03 职场文书
学生党员检讨书范文
2014/12/27 职场文书
预备党员转正意见
2015/06/01 职场文书
各类场合主持词开场白范文集锦
2019/08/16 职场文书
Python序列化模块JSON与Pickle
2022/06/05 Python