ES6入门教程之Class和Module详解


Posted in Javascript onMay 17, 2017

本文主要介绍了ES6中Class和Module的相关内容,分享出来供大家参考学习,下面来看看详细的介绍:

一、Class

ES6引入了Class(类)这个概念,作为对象的模板。通过class关键字,可以定义类。

// 定义类
 class Point() {

  constructor(x, y) {
   this.x = x;
   this.y = y;
  }

  toString() {
   return '(' + this.x + ', ' + this.y + ')';
  }
 }

 var point = new Point(2, 3);
 point.toString(); //(2, 3)

在上面的代码片段里,先是定义了一个Point类,里面还有一个constructor函数,这就是构造函数。而this关键字则代表实例对象。

Class之间可以通过extends关键字实现继承

Class ColorPoint extends Point {
 constructor(x, y, color) {
  super(x, y); //等同于super.constructor(x, y)
  this.color = color;
 }

 toString() {
  return this.color + '' + super();
 }
}

二、Module的基本用法

1>、export和import

ES6实现了模块功能,视图解决JavaScript代码的依赖和部署上的问题,取代现有的commonJS和AMD规范,成为浏览器和服务器通用的模块解决方案。

模块的功能有两个关键字: export和import。export用于用户自定义模块。规定对外接口;import用于输入其他模块的功能,同时创建命名空间(namespace),防止函数名冲突。

ES6允许将独立的JS文件作为模块,也就是说,允许一个JavaScript脚本文件调用另一个脚本文件。最简单的模块就是一个JS文件,里面使用export关键字输出变量。

//profile.js
 export var firstName = "Pandora";
 export var lastName = "G.Dragon";
 export var year = 1973;

 //export还有下面这种写法,两者是等价的
 var firstName = "Pandora";
 var lastName = "G.Dragon";
 var year = 1973;
 export({firstName, lastName, year});

使用export定义模块之后,其他JS文件就可以通过import关键字加载这个模块(文件)了。加载方式如下:

import {firstName, lastName, year} from './profile';

 function setHeader(element) {
  element.textContent = firstName + '' + lastName;
 }

上面的代码片段中,使用了import关键字接受一个对象——用“{ }”表示。里面指定了要从其他模块中导入的变量。大括号里面的变量名必须与被导入模块对外接口的名称相同。

但是,如果要给输入的属性和方法重新取一个名字,import语句要写成下面这样。

import {someMethod, another as newName} from './exporter';

2>、模块的整体加载

export关键字除了输出变量,还可以输出方法或类(class)。看看下面代码:

// circle.js

 // 方法-1: 返回圆的面积
 export function area(radius) {
  return Math.PI * radius * radius; 
 }
 // 方法-2: 返回圆的周长
 export function circumference(radius) {
  return 2 * Mathi.PI * radius;
 }

下面,定义一个main.js文件引用上面的模块。

// mian.js
 import {area, circumference} from 'circle';

 console.log("圆面积: " + area(4));
 console.log("圆周长: " + circumference(14));

上面的写法是逐一制定要导入的方法。但是还有另外一种写法,就是使用module关键字,整体导入。

// main.js
 module circle from 'circle';

 console.log("圆面积: " + circle.area(4));
 console.log("圆周长: " + circle.circumference(14));

module关键字后面跟着一个变量,表示导入的模块定义在该变量上。

3>、export default语句

如果不想为某个属性或方法制定输入的名称,可以使用export default语句。

// export-default.js
 export default function foo() { // foo()就是这个模块的默认方法
  console.log('foo');
 }

当在其它模块中导入该模块时,import语句可以为默认方法指定任意名字。

// import-default.js
 import customName from './export-default';
 customName(); //'foo'

显然,一个模块只能由一个默认方法。
对于默认属性,则是直接定义在export default后面即可。如下代码所示:

export default 42;

三、模块的继承

模块之间是可以继承的。

现在,假设一个circlePlus模块继承了circle模块。代码如下:

//circleplus.js
 export * from 'circle'; // "export *"表示输出circle模块的所有属性和方法
 export var e = 2.71828;
 export default function(x) {
  return Math.exp( x );
 }

这时,可以对cicle中的属性和方法改名后再输出。

export {area as circleArea } from 'circle';

加载模块的写法如下:

//main.js
 module math from 'circleplus';
 import exp from "circleplus"; // "import exp"表示将circleplus模块的默认方法加载为exp方法。
 console.log( exp(math.pi) );

总结

以上就是这篇文章的全部内容了,希望本文的内容对大家的学习或者工作能带来一定的帮助,如果有疑问大家可以留言交流,谢谢大家对三水点靠木的支持。

Javascript 相关文章推荐
说说掌握JavaScript语言的思想前提想学习js的朋友可以看看
Apr 01 Javascript
javascript 弹出窗口中是否显示地址栏的实现代码
Apr 14 Javascript
Javascript的常规数组和关联数组对比小结
May 24 Javascript
Javascript异步编程的4种方法让你写出更出色的程序
Jan 17 Javascript
js实现的早期滑动门菜单效果代码
Aug 27 Javascript
Node.js项目中调用JavaScript的EJS模板库的方法
Mar 11 Javascript
JS定义类的六种方式详解
May 12 Javascript
Angular+Node生成随机数的方法
Jun 16 Javascript
js实现图片懒加载效果
Jul 17 Javascript
angular第三方包开发整理(小结)
Apr 19 Javascript
vue移动端实现手机左右滑动入场动画
Jun 17 Javascript
在vue中封装方法以及多处引用该方法详解
Aug 14 Javascript
AngularJS实现动态添加Option的方法
May 17 #Javascript
AngularJS+bootstrap实现动态选择商品功能示例
May 17 #Javascript
Vue声明式渲染详解
May 17 #Javascript
node.js调用Chrome浏览器打开链接地址的方法
May 17 #Javascript
用纯Node.JS弹出Windows系统消息提示框实例(MessageBox)
May 17 #Javascript
AngularJS实现的回到顶部指令功能实例
May 17 #Javascript
bootstrap模态框示例代码分享
May 17 #Javascript
You might like
php 上传功能实例代码
2010/04/13 PHP
php visitFile()遍历指定文件夹函数
2010/08/21 PHP
深入解析phpCB批量转换的代码示例
2013/06/27 PHP
PHP把空格、换行符、中文逗号等替换成英文逗号的正则表达式
2014/05/04 PHP
在WordPress中使用wp_count_posts函数来统计文章数量
2016/01/05 PHP
Symfony2学习笔记之控制器用法详解
2016/03/17 PHP
php将print_r处理后的数据还原为原始数组的解决方法
2016/11/02 PHP
“不能执行已释放的Script代码”错误的原因及解决办法
2007/09/09 Javascript
showModalDialog模态对话框的使用详解以及浏览器兼容
2014/01/11 Javascript
SeaJS入门教程系列之SeaJS介绍(一)
2014/03/03 Javascript
AngularJS表单验证中级篇(3)
2016/09/28 Javascript
教大家轻松制作Bootstrap漂亮表格(table)
2016/12/13 Javascript
基于vue2.0+vuex的日期选择组件功能实现
2017/03/13 Javascript
vue的安装及element组件的安装方法
2018/03/09 Javascript
监听angularJs列表数据是否渲染完毕的方法示例
2018/11/07 Javascript
在微信小程序中使用图表的方法示例
2019/04/25 Javascript
详解vuejs2.0 select 动态绑定下拉框支持多选
2019/04/25 Javascript
vue在index.html中引入静态文件不生效问题及解决方法
2019/04/29 Javascript
微信小程序如何调用图片接口API并居中显示
2019/06/29 Javascript
微信小程序进入广告实现代码实例
2019/09/19 Javascript
js实现简单点赞操作
2020/03/17 Javascript
vue实践---vue不依赖外部资源实现简单多语操作
2020/09/21 Javascript
Vue 解决在element中使用$notify在提示信息中换行问题
2020/11/11 Javascript
机器学习的框架偏向于Python的13个原因
2017/12/07 Python
Python paramiko模块使用解析(实现ssh)
2019/08/30 Python
Python爬虫制作翻译程序的示例代码
2021/02/22 Python
html5+css3进度条倒计时动画特效代码【推荐】
2016/03/08 HTML / CSS
临床医师专业个人自我评价范文
2013/11/07 职场文书
校运会广播稿100字
2014/01/27 职场文书
商场主管竞聘书
2014/03/31 职场文书
暑期实践个人总结
2015/03/06 职场文书
python plt.plot bar 如何设置绘图尺寸大小
2021/06/01 Python
Python如何识别银行卡卡号?
2021/06/10 Python
解析MySQL binlog
2021/06/11 MySQL
原生JavaScript实现简单五子棋游戏
2021/06/28 Javascript
如何使用 resize 实现图片切换预览功能
2021/08/23 HTML / CSS