双十一,购物节与光棍节,在这个特殊的日子里研究了一下模块化开发的我,突然想结合这个日子,以一个表白的例子浅谈es6模块化的用法。
在之前的 javascript 中一直是没有模块系统的,随着JavaScript的发展,涌现出了各种规范, 其中比较知名的是CommonJS和AMD。前者用于服务器,后者用于浏览器。
时代发展的速度总是令人有点惊讶,是的, ES6的出现给我们带来了它的模块化机制,一种完全可以取代现有的CommonJS和AMD规范,成为浏览器和服务器通用的模块解决方案。
es6 中新增了两个命令 export
和 import
, export
命令用于规定模块的对外接口,import
命令用于输入其他模块提供的功能。
结合光棍节举例:
一个模块就是一个独立的文件。该文件内部的所有变量,外部无法获取。如果你希望外部能够读取模块内部的某个 变量,就必须使用export关键字输出该变量。下面是一个JS文件,里面使用export命令输出变量。
①表白例子-主要人物模块:
模块介绍:leader.js,模块包含一个leader对象,leader里有媒人(matchmaker)、女方(girl)、男方(boy)三个对象,
每个对象都包含一个say方法。对象以及成员方法都创建好之后,使用es6的module.exports定义对外接口为leader。
// leader.js var leader = { agents : { say : function () { return "Please say somethings!"; } }, girl : { say : function () { return "Yes, i want to!!"; } }, boy : { say : function () { return "Would you want to be my girlfriend?"; } } } module.exports = leader;
②表白例子-观众模块:
模块介绍:audience.js,这个模块相对更简单,只有一个用于起哄的say方法。
// audience.js let audience = { say : function () { return "Promise him!!!Promise him!!!"; } } module.exports = audience;
③表白例子-执行模块:
模块介绍:doing.js,之前定义了参与表白的主要对象以及观众以及需要做的事,但是没有去执行,doing.js模块的目的就是让表白事件执行起来,所以要先在头部使用es6的
import
导入其他模块提供的功能,随后定义了init()初始化方法,最后调用初始化方法。此模块运行结果为:// doing.js import leader from 'leader'; import audience from 'audience' let doing = { init : function () { leader.agents.say(); leader.boy.say(); audience.say(); leader.girl.say(); } } doing.init();
大概意思:Please say somethings! Would you want to be my girlfriend? Promise him!!!Promise him!!! Yes, i want to!!
介绍对象的人对男孩说:说话呀!
男孩:做我女朋友好吗?
观众:答应他!答应他!
女孩:我愿意!
哈哈,结果总是这么美好。
注:以上代码为编写过程中直接输入,并未真实运行,假如有bug请指出,谢谢。
以上为es6模块化的基本用法,具体应用于实际开发时还有很多要注意的事项,比如为了兼容浏览器需要编译打包,此篇文章暂时不深入讨论。