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 操作Word和Excel的实现代码
Oct 26 Javascript
JavaScript高级程序设计 客户端存储学习笔记
Sep 10 Javascript
Node.js利用Net模块实现多人命令行聊天室的方法
Dec 23 Javascript
JavaScript实现垂直滚动条效果
Jan 18 Javascript
Vue2.0组件间数据传递示例
Mar 07 Javascript
微信小程序中多个页面传参通信的学习与实践
May 05 Javascript
详解基于node的前端项目编译时内存溢出问题
Aug 01 Javascript
React-native桥接Android原生开发详解
Jan 17 Javascript
详解vue通过NGINX部署在子目录或者二级目录实践
Sep 03 Javascript
运用js实现图层拖拽的功能
May 24 Javascript
微信公众号中的JSSDK接入及invalid signature等常见错误问题分析(全面解析)
Apr 11 Javascript
html-webpack-plugin修改页面的title的方法
Jun 18 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
linux php mysql数据库备份实现代码
2009/03/10 PHP
析构函数与php的垃圾回收机制详解
2013/10/28 PHP
PHP实现的简单日历类
2014/11/29 PHP
php中preg_match的isU代表什么意思
2015/10/01 PHP
PHP读取XML格式文件的方法总结
2017/02/27 PHP
PHP排序算法之直接插入排序(Straight Insertion Sort)实例分析
2018/04/20 PHP
Django中通过定时任务触发页面静态化的处理方式
2018/08/29 PHP
利用Jquery实现可多选的下拉框
2014/02/21 Javascript
js实现照片墙功能实例
2015/02/05 Javascript
js实现非常简单的焦点图切换特效实例
2015/05/07 Javascript
javascript文本模板用法实例
2015/07/31 Javascript
jQuery 判断图片是否加载完成方法汇总
2015/08/10 Javascript
JavaScript位置与大小(1)之正确理解和运用与尺寸大小相关的DOM属性
2015/12/26 Javascript
AngularJS模块学习之Anchor Scroll
2016/01/19 Javascript
javascript 实现动态侧边栏实例详解
2016/11/11 Javascript
Extjs gridpanel 中的checkbox(复选框)根据某行的条件不能选中的解决方法
2017/02/17 Javascript
jquery编写日期选择器
2017/03/16 Javascript
JavaScript运动框架 解决防抖动问题、悬浮对联(二)
2017/05/17 Javascript
用Vue.extend构建消息提示组件的方法实例
2017/08/08 Javascript
nginx配置React静态页面的方法教程
2017/11/03 Javascript
axios向后台传递数组作为参数的方法
2018/08/11 Javascript
bootstrap table实现合并单元格效果
2018/12/24 Javascript
Vue组件间通信方法总结(父子组件、兄弟组件及祖先后代组件间)
2019/04/17 Javascript
nodejs使用node-xlsx生成excel的方法示例
2019/08/22 NodeJs
在Python下尝试多线程编程
2015/04/28 Python
搞清楚 Python traceback的具体使用方法
2019/05/13 Python
python opencv将图片转为灰度图的方法示例
2019/07/31 Python
如何基于python操作json文件获取内容
2019/12/24 Python
Python selenium模拟手动操作实现无人值守刷积分功能
2020/05/13 Python
电子商务专业毕业生工作推荐信
2013/11/17 职场文书
《小猫刮胡子》教学反思
2014/02/21 职场文书
开工仪式策划方案
2014/05/23 职场文书
大一新生检讨书
2014/10/29 职场文书
学校证明范文
2015/06/24 职场文书
2015年美容师个人工作总结
2015/10/14 职场文书
在校大学生才艺比赛策划书怎么写?
2019/08/26 职场文书