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中Get和Set访问器的实现代码
Sep 19 Javascript
JSON辅助格式化处理方法
Mar 26 Javascript
删除条目时弹出的确认对话框
Jun 05 Javascript
js动态添加的DIV中的onclick事件简单实例
Jul 25 Javascript
Cookies 和 Session的详解及区别
Apr 21 Javascript
js模拟百度模糊搜索的实例
Aug 04 Javascript
解决Vue编译时写在style中的路径问题
Sep 21 Javascript
axios post提交formdata的实例
Mar 16 Javascript
vue引入js数字小键盘的实现代码
May 14 Javascript
Vue中的异步组件函数实现代码
Jul 20 Javascript
详解Vue项目中实现锚点定位
Apr 24 Javascript
JQuery事件委托(适用于给动态生成的脚本元素添加事件)
Feb 01 jQuery
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类
2006/10/09 PHP
浅谈php中fopen不能创建中文文件名文件的问题
2017/02/06 PHP
IE 上下滚动展示模仿Marquee机制
2009/12/20 Javascript
jQuery获取浏览器中的分辨率实现代码
2013/04/23 Javascript
js判断价格,必须为数字且不能为负数的实现方法
2016/10/07 Javascript
Angular.js项目中使用gulp实现自动化构建以及压缩打包详解
2017/07/19 Javascript
echarts学习笔记之图表自适应问题详解
2017/11/22 Javascript
详解如何构建一个Angular6的第三方npm包
2018/09/07 Javascript
详解vue-router 动态路由下子页面多页共活的解决方案
2019/12/22 Javascript
解决vue-photo-preview 异步图片放大失效的问题
2020/07/29 Javascript
Chrome插件开发系列一:弹窗终结者开发实战
2020/10/02 Javascript
[05:36]DOTA2 2015国际邀请赛中国区预选赛第四日TOP10
2015/05/29 DOTA
[07:43]《辉夜杯》公开赛晋级外卡赛战队—TRG训练生活探秘
2015/12/11 DOTA
[51:22]Fnatic vs IG 2018国际邀请赛小组赛BO2 第一场 8.17
2018/08/18 DOTA
Python 中的 else详解
2016/04/23 Python
python实现汉诺塔方法汇总
2016/07/25 Python
Python中的字符串操作和编码Unicode详解
2017/01/18 Python
pandas实现将dataframe满足某一条件的值选出
2019/06/12 Python
django 中的聚合函数,分组函数,F 查询,Q查询
2019/07/25 Python
Python如何转换字符串大小写
2020/06/04 Python
Matplotlib 折线图plot()所有用法详解
2020/07/28 Python
HTML5实现视频弹幕功能
2019/08/09 HTML / CSS
英国空调、除湿机和通风设备排名第一:Air Con Centre
2019/02/25 全球购物
Hotels.com拉丁美洲:从豪华酒店到经济型酒店的预定优惠和折扣
2019/12/09 全球购物
马歇尔耳机官网:Marshall Headphones
2020/02/04 全球购物
中软Java笔试题
2012/11/11 面试题
护理学毕业生求职信
2013/11/14 职场文书
教师实习自我鉴定
2013/12/18 职场文书
桥梁工程专业求职信
2014/04/21 职场文书
社区领导班子四风问题原因分析及整改措施
2014/09/28 职场文书
司法局群众路线教育实践活动整改措施思想汇报
2014/10/13 职场文书
肖申克的救赎观后感
2015/06/02 职场文书
高中家长意见怎么写
2015/06/03 职场文书
Js类的构建与继承案例详解
2021/09/15 Javascript
《黑岩★★射手 DAWN FALL》BD发售宣传CM公开
2022/04/04 日漫
彻底卸载VMware虚拟机的超详细步骤记录
2022/07/15 Servers