本文实例讲述了ES6新特性之类(Class)和继承(Extends)相关概念与用法。分享给大家供大家参考,具体如下:

一、类(Class)
1.基本语法
JavaScript语言的传统方法是通过构造函数,定义并生成新对象。下面是一个例子
function Point(x, y) {
this.x = x;
this.y = y;
}
Point.prototype.toString = function () {
return '(' + this.x + ', ' + this.y + ')';
};
var p = new Point(1, 2);
ES6提供了更接近传统语言的写法,引入了Class(类)这个概念,作为对象的模板。通过class关键字,可以定义类。基本上,ES6的class可以看作只是一个语法糖,它的绝大部分功能,ES5都可以做到,新的class写法只是让对象原型的写法更加清晰、更像面向对象编程的语法而已。上面的代码用ES6的“类”改写,就是下面这样。
//定义类
class Point {
constructor(x, y) { //constructor 构造方法
this.x = x;
this.y = y;
}
toString() {
return '(' + this.x + ', ' + this.y + ')';
}
}
var p = new Point(1, 2);
构造函数的prototype属性,在ES6的“类”上面继续存在。事实上,类的所有方法都还是定义在类的prototype属性上面。
2.constructor方法
constructor方法是类的默认方法,通过new命令生成对象实例时,自动调用该方法。一个类必须有constructor方法,如果没有显式定义,一个空的constructor方法会被默认添加。
二、继承(Extends)
Class之间可以通过extends关键字实现继承,这比ES5的通过修改原型链实现继承,要清晰和方便很多。
class ColorPoint extends Point {
constructor(x, y, color) {
super(x, y); // 调用父类的constructor(x, y)
this.color = color;
}
toString() {
return this.color + ' ' + super.toString(); // 调用父类的toString()
}
}
上面代码中,constructor方法和toString方法之中,都出现了super关键字,它在这里表示父类的构造函数,用来新建父类的this对象。
子类必须在constructor方法中调用super方法,否则新建实例时会报错。这是因为子类没有自己的this对象,而是继承父类的this对象,然后对其进行加工。如果不调用super方法,子类就得不到this对象。
三、原生构造函数继承
原生构造函数是指语言内置的构造函数,通常用来生成数据结构。ECMAScript的原生构造函数大致有下面这些。以前,这些原生构造函数是无法继承的。
Boolean()
Number()
String()
Array()
Date()
Function()
RegExp()
Error()
Object()
ES6允许继承原生构造函数定义子类,因为ES6是先新建父类的实例对象this,然后再用子类的构造函数修饰this,使得父类的所有行为都可以继承。下面是一个继承Array的例子。
class MyArray extends Array {
constructor(...args) {
super(...args);
}
}
var arr = new MyArray();
arr[0] = 12;
arr.length // 1
arr.length = 0;
arr[0] // undefined
上面代码定义了一个MyArray类,继承了Array构造函数,因此就可以从MyArray生成数组的实例。这意味着,ES6可以自定义原生数据结构(比如Array、String等)的子类,这是ES5无法做到的。
四、Class的Generator方法
如果某个方法之前加上星号(*),就表示该方法是一个Generator函数。
class Foo {
constructor(...args) {
this.args = args;
}
* [Symbol.iterator]() {
for (let arg of this.args) {
yield arg;
}
}
}
for (let x of new Foo('hello', 'world')) {
console.log(x);
}
// hello
// world
上面代码中,Foo类的Symbol.iterator方法前有一个星号,表示该方法是一个Generator函数。Symbol.iterator方法返回一个Foo类的默认遍历器,for...of循环会自动调用这个遍历器。
五、Class的静态方法
类相当于实例的原型,所有在类中定义的方法,都会被实例继承。如果在一个方法前,加上static关键字,就表示该方法不会被实例继承,而是直接通过类来调用,这就称为“静态方法”。
class Foo {
static classMethod() {
return 'hello';
}
}
Foo.classMethod() // 'hello'
var foo = new Foo();
foo.classMethod()
// TypeError: foo.classMethod is not a function
上面代码中,Foo类的classMethod方法前有static关键字,表明该方法是一个静态方法,可以直接在Foo类上调用(Foo.classMethod()),而不是在Foo类的实例上调用。如果在实例上调用静态方法,会抛出一个错误,表示不存在该方法。
父类的静态方法,可以被子类继承。
class Foo {
static classMethod() {
return 'hello';
}
}
class Bar extends Foo {
}
Bar.classMethod(); // 'hello'
上面代码中,父类Foo有一个静态方法,子类Bar可以调用这个方法。
更多关于JavaScript相关内容感兴趣的读者可查看本站专题:《ECMAScript6(ES6)入门教程》、《JavaScript数组操作技巧总结》、《JavaScript字符与字符串操作技巧总结》、《JavaScript数据结构与算法技巧总结》、《JavaScript错误与调试技巧总结》及《JavaScript数学运算用法总结》
希望本文所述对大家JavaScript程序设计有所帮助。
# ES6
# 新特性
# 类
# Class
# 继承
# Extends
# ES6中非常实用的新特性介绍
# JavaScript ES6的新特性使用新方法定义Class
# JavaScript中的Reflect对象详解(ES6新特性)
# 深入浅出ES6新特性之函数默认参数和箭头函数
# 简单谈谈ES6的六个小特性
# ES6新特性之Symbol类型用法分析
# ES6(ECMAScript 6)新特性之模板字符串用法分析
# ES6新特性之变量和字符串用法示例
# ES6新特性之模块Module用法详解
# ES6新特性之字符串的扩展实例分析
# ES6新特性二:Iterator(遍历器)和for-of循环详解
# ES6新特性六:promise对象实例详解
# ES6新特性七:数组的扩充详解
# ES6新特性八:async函数用法实例详解
# 让微信小程序支持ES6中Promise特性的方法详解
# ES6新特性:使用export和import实现模块化详解
# es6新特性之 class 基本用法解析
# ES6 13个新特性总结
# 子类
# 是一个
# 数据结构
# 遍历
# 有一个
# 自己的
# 这是
# 操作技巧
# 是在
# 相关内容
# 是指
# 感兴趣
# 而不
# 这就
# 对其
# 可以通过
# 给大家
# 如果没有
# 不存在
# 可以直接
相关文章:
Avalonia如何实现跨窗口通信 Avalonia窗口间数据传递
行程制作网站有哪些,第三方机票电子行程单怎么开?
如何通过宝塔面板实现本地网站访问?
企业网站制作公司网页,推荐几家专业的天津网站制作公司?
建站之星安装失败:服务器环境不兼容?
装修招标网站设计制作流程,装修招标流程?
香港网站服务器数量如何影响SEO优化效果?
如何快速生成可下载的建站源码工具?
天河区网站制作公司,广州天河区如何办理身份证?需要什么资料有预约的网站吗?
如何在阿里云香港服务器快速搭建网站?
相亲简历制作网站推荐大全,新相亲大会主持人小萍萍资料?
如何制作公司的网站链接,公司想做一个网站,一般需要花多少钱?
建站之星代理平台如何选择最佳方案?
网站制作模板下载什么软件,ppt模板免费下载网站?
如何通过VPS搭建网站快速盈利?
在线流程图制作网站手机版,谁能推荐几个好的CG原画资源网站么?
建站主机选择指南:服务器配置与SEO优化实战技巧
seo网站制作优化,网站SEO优化步骤有哪些?
高防服务器如何保障网站安全无虞?
如何用已有域名快速搭建网站?
如何高效配置香港服务器实现快速建站?
常州企业网站制作公司,全国继续教育网怎么登录?
深圳网站制作平台,深圳市做网站好的公司有哪些?
深入理解Android中的xmlns:tools属性
微信小程序 input输入框控件详解及实例(多种示例)
网站制作新手教程,新手建设一个网站需要注意些什么?
c++怎么编写动态链接库dll_c++ __declspec(dllexport)导出与调用【方法】
在线ppt制作网站有哪些,请推荐几个好的课件下载的网站?
如何构建满足综合性能需求的优质建站方案?
C#怎么创建控制台应用 C# Console App项目创建方法
如何通过VPS建站实现广告与增值服务盈利?
如何确保西部建站助手FTP传输的安全性?
Swift开发中switch语句值绑定模式
如何用低价快速搭建高质量网站?
微信小程序制作网站有哪些,微信小程序需要做网站吗?
如何在阿里云部署织梦网站?
网站图片在线制作软件,怎么在图片上做链接?
如何通过山东自助建站平台快速注册域名?
专业公司网站制作公司,用什么语言做企业网站比较好?
一键制作网站软件下载安装,一键自动采集网页文档制作步骤?
网站制作软件免费下载安装,有哪些免费下载的软件网站?
东莞专业网站制作公司有哪些,东莞招聘网站哪个好?
专业企业网站设计制作公司,如何理解商贸企业的统一配送和分销网络建设?
如何自己制作一个网站链接,如何制作一个企业网站,建设网站的基本步骤有哪些?
如何选择高效可靠的多用户建站源码资源?
实例解析Array和String方法
武汉网站制作费用多少,在武汉武昌,建面100平方左右的房子,想装暖气片,费用大概是多少啊?
如何基于PHP生成高效IDC网络公司建站源码?
如何选择适合PHP云建站的开源框架?
高配服务器限时抢购:企业级配置与回收服务一站式优惠方案
*请认真填写需求信息,我们会在24小时内与您取得联系。