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 页面自动加载函数(兼容多浏览器)
May 18 Javascript
一段实现页面上的图片延时加载的js代码
Feb 11 Javascript
Jquery实现无刷新DropDownList联动实现代码
Mar 08 Javascript
js parentElement和offsetParent之间的区别
Mar 23 Javascript
基于jQuery的弹出警告对话框美化插件(警告,确认和提示)
Jun 10 Javascript
js有关元素内容操作小结
Dec 20 Javascript
jquery提交form表单简单示例分享
Mar 03 Javascript
javascript引用赋值(地址传值)用法实例
Jan 13 Javascript
详解Jquery实现ready和bind事件
Apr 14 Javascript
详解Angular4中路由Router类的跳转navigate
Jun 09 Javascript
Angular 1.x个人使用的经验小结
Jul 19 Javascript
vue3.0封装轮播图组件的步骤
Mar 04 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
PHP垃圾回收机制引用计数器概念分析
2013/06/24 PHP
php插入含有特殊符号数据的处理方法
2016/11/24 PHP
自写的利用PDO对mysql数据库增删改查操作类
2018/02/19 PHP
YII框架http缓存操作示例
2019/04/29 PHP
thinkPHP5框架实现多数据库连接,跨数据连接查询操作示例
2019/05/29 PHP
jQuery1.6 使用方法二
2011/11/23 Javascript
javascript学习笔记(二)数组和对象部分
2014/09/30 Javascript
js判断移动端是否安装某款app的多种方法
2015/12/18 Javascript
javascript点击按钮实现隐藏显示切换效果
2016/02/03 Javascript
js设置文字颜色的方法示例
2016/12/30 Javascript
Angualrjs和bootstrap相结合实现数据表格table
2017/03/30 Javascript
Webpack如何引入bootstrap的方法
2017/06/17 Javascript
微信小程序模板(template)使用详解
2018/01/31 Javascript
微信小程序功能之全屏滚动效果的实现代码
2018/11/22 Javascript
webpack的tree shaking的实现方法
2019/09/18 Javascript
Typescript的三种运行方式(小结)
2019/09/18 Javascript
js实现内置计时器
2019/12/16 Javascript
vuex+axios+element-ui实现页面请求loading操作示例
2020/02/02 Javascript
Node.js中的异步生成器与异步迭代详解
2021/01/31 Javascript
Python3计算三角形的面积代码
2017/12/18 Python
python计算列表内各元素的个数实例
2018/06/29 Python
用python统计代码行的示例(包括空行和注释)
2018/07/24 Python
python 多线程对post请求服务器测试并发的方法
2019/06/13 Python
SpringBoot首页设置解析(推荐)
2021/02/11 Python
支持IE8的纯css3开发的响应式设计动画菜单教程
2014/11/05 HTML / CSS
html5使用canvas实现跟随光标跳动的火焰效果
2014/01/07 HTML / CSS
html2canvas把div保存图片高清图的方法示例
2018/03/05 HTML / CSS
德国古洛迷亚百货官网:GALERIA Kaufhof
2017/06/20 全球购物
幼儿园教师个人总结
2015/02/05 职场文书
销售经理助理岗位职责
2015/04/13 职场文书
新闻通讯稿模板
2015/07/22 职场文书
丧事酒宴答谢词
2015/09/30 职场文书
班干部学习委员竞选稿
2015/11/20 职场文书
详解Vue的options
2021/05/15 Vue.js
Java面试题冲刺第十五天--设计模式
2021/08/07 面试题
如何使用注解方式实现 Redis 分布式锁
2022/07/23 Redis