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关闭本窗口不弹出询问框的方法
Sep 12 Javascript
JavaScript中操作字符串小结
May 04 Javascript
在Ubuntu系统上安装Node.JS的教程
Oct 15 Javascript
实用jquery操作表单元素的简单代码
Jul 04 Javascript
js控住DOM实现发布微博效果
Aug 30 Javascript
easyui导出excel无法弹出下载框的快速解决方法
Nov 10 Javascript
Bootstrap3 多选和单选框(checkbox)
Dec 29 Javascript
js面向对象编程总结
Feb 16 Javascript
使用vue.js实现checkbox的全选和多个的删除功能
Feb 17 Javascript
浅谈Node模块系统及其模式
Nov 17 Javascript
小程序获取周围IBeacon设备的方法
Oct 31 Javascript
Vue3中的Refs和Ref详情
Nov 11 Vue.js
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
sae使用smarty模板的方法
2013/12/17 PHP
php使用GeoIP库实例
2014/06/27 PHP
用 JavaScript 迁移目录
2006/12/18 Javascript
InnerHtml和InnerText的区别分析
2009/03/13 Javascript
基于jQuery实现下拉框
2014/11/24 Javascript
JS实现让网页背景图片斜向移动的方法
2015/02/25 Javascript
JavaScript父子窗体间的调用方法
2015/03/31 Javascript
nodeJs爬虫获取数据简单实现代码
2016/03/29 NodeJs
详解JavaScript中的自定义事件编写
2016/05/10 Javascript
漫谈JS引擎的运行机制 你应该知道什么
2016/06/15 Javascript
最常见和最有用的字符串相关的方法详解
2017/02/06 Javascript
BootStrap selectpicker后台动态绑定数据
2017/06/01 Javascript
详解Vue学习笔记进阶篇之列表过渡及其他
2017/07/17 Javascript
解决微信小程序云开发中获取数据库的内容为空的方法
2019/05/15 Javascript
JavaScript 作用域scope简单汇总
2019/10/23 Javascript
微信小程序使用自定义组件导航实现当前页面高亮
2020/01/02 Javascript
mpvue实现微信小程序快递单号查询代码
2020/04/03 Javascript
[02:35]DOTA2英雄基础教程 狙击手
2014/01/14 DOTA
[01:56]林书豪DOTA2上海特级锦标赛励志短片
2016/03/05 DOTA
python统计字符串中指定字符出现次数的方法
2015/04/04 Python
python脚本作为Windows服务启动代码详解
2018/02/11 Python
使用Python画出小人发射爱心的代码
2019/11/23 Python
Tensorflow tf.tile()的用法实例分析
2020/05/22 Python
Python Selenium模块安装使用教程详解
2020/07/09 Python
如何用python开发Zeroc Ice应用
2021/01/29 Python
简述进程的启动、终止的方式以及如何进行进程的查看
2014/02/20 面试题
生产车间主任的个人自我鉴定
2013/10/25 职场文书
借款协议书
2014/04/12 职场文书
驾驶员培训方案
2014/05/01 职场文书
活动总结报告怎么写
2014/07/03 职场文书
2015年清明节活动总结
2015/02/09 职场文书
2015年反腐倡廉工作总结
2015/05/14 职场文书
大学生受助感言
2015/08/01 职场文书
Nginx快速入门教程
2021/03/31 Servers
pytorch实现加载保存查看checkpoint文件
2022/07/15 Python
MySQL中TIMESTAMP类型返回日期时间数据中带有T的解决
2022/12/24 MySQL