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 相关文章推荐
jquery插件validate验证的小例子
May 08 Javascript
js 获取元素下面所有li的两种方法
Apr 14 Javascript
JS实现仿雅虎首页快捷登录入口及导航模块效果
Sep 19 Javascript
DIV随滚动条滚动而滚动的实现代码【推荐】
Apr 12 Javascript
jQuery返回定位插件详解
May 15 jQuery
基于ExtJs在页面上window再调用Window的事件处理方法
Jul 26 Javascript
JS实现静态页面搜索并高亮显示功能完整示例
Sep 19 Javascript
JS运动特效之链式运动分析
Jan 24 Javascript
chosen实现省市区三级联动
Aug 16 Javascript
Vue项目中配置pug解析支持
May 10 Javascript
Vue实战教程之仿肯德基宅急送App
Jul 19 Javascript
解决antd datepicker 获取时间默认少8个小时的问题
Oct 29 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 自定义错误处理函数的使用详解
2013/05/10 PHP
Thinkphp批量更新数据的方法汇总
2016/06/29 PHP
Laravel 5.3 学习笔记之 错误&日志
2016/08/28 PHP
jquery validator 插件增加日期比较方法
2010/02/21 Javascript
jQuery之按钮组件的深入解析
2013/06/19 Javascript
js中substring和substr的详细介绍与用法
2013/08/29 Javascript
jQuery Ajax异步处理Json数据详解
2013/11/05 Javascript
Jquery焦点与失去焦点示例应用
2014/06/10 Javascript
详解JavaScript基于面向对象之继承实例
2015/12/16 Javascript
JS 对java返回的json格式的数据处理方法
2016/12/05 Javascript
EasyUI学习之Combobox下拉列表(1)
2016/12/29 Javascript
运用jQuery写的验证表单(实例讲解)
2017/07/06 jQuery
jQuery实现获取动态添加的标签对象示例
2018/06/28 jQuery
js实现图片上传并预览功能
2018/08/06 Javascript
原生JS实现随机点名项目的实例代码
2019/04/30 Javascript
基于Node.js的大文件分片上传示例
2019/06/19 Javascript
基于JavaScript伪随机正态分布代码实例
2019/11/07 Javascript
python使用urllib2模块获取gravatar头像实例
2013/12/18 Python
深入理解NumPy简明教程---数组2
2016/12/17 Python
python导入时小括号大作用
2017/01/10 Python
Python常用内置模块之xml模块(详解)
2017/05/23 Python
Python tkinter模块中类继承的三种方式分析
2017/08/08 Python
python实现简单点对点(p2p)聊天
2017/09/13 Python
使用python根据端口号关闭进程的方法
2018/11/06 Python
python脚本实现音频m4a格式转成MP3格式的实例代码
2019/10/09 Python
详解Python3 中的字符串格式化语法
2020/01/15 Python
Python os模块常用方法和属性总结
2020/02/20 Python
python利用opencv保存、播放视频
2020/11/02 Python
艺校音乐专业自我鉴定范文
2014/03/01 职场文书
希特勒经典演讲稿
2014/05/19 职场文书
副总经理任命书
2014/06/05 职场文书
献爱心大型公益活动策划方案
2014/09/15 职场文书
2014年医药代表工作总结
2014/11/22 职场文书
2019年大学生职业生涯规划书最新范文
2019/03/25 职场文书
新学期新寄语,献给新生们!
2019/11/15 职场文书
vue实现可拖拽的dialog弹框
2021/05/13 Vue.js