在ES2015之前,定义类的方法只能通过原型链来模拟

function Animal(family,species) {
this.family = family;
this.species = species;
};
Animal.prototype.yell = function() {
console.log(this.family);
}
let dog = Animal('dogs','four feet');

而在ES2015中可以使用class关键字来定义类,使用constructor来定义类创建时所需的参数,直接定义函数来创建类方法:

class Animal {
constructor (family,species) {
this.family = family;
this.species = species;
};
yell () {// 等于Animal.prototype.yell = function(){}
return this.family;
}
} const dog = new Animal('dog','four feet');

在类定义中可以看到yell的方法没有使用键值对的方式,这也是ES6中新引入的对象字面量扩展,等同于:

const Animal= {
yell: function() {
return this.family;
}
}

类 + promise

class Point {
constructor (x, y) {
this.x = x;
this.y = y;
};
moveright(step) {
return new Promise(resolve => resolve({
x: this.x + step,
y: this.y
}))
}
}
const p = new Point(2,5);

定义一个点类,拥有moveright的方法,返回的使一个Promise,利用箭头函数调用resolve,使Promise状态转换到onFulfilled。

p.moveright(3)
.then(({x, y}) => console.log(`${x}, ${y}`));//5,5

这里的{x,y} 用了ES6的新语法解构,将返回的对象中的x和y键对应的值返回。

下面讲讲类的继承,在函数中的继承有很多种继承方式,具体的继承方式我会在我的博客中更新。

创建一个Point2D类

class Point2D {
constructor(x,y) {
this.x = x;
this.y = y;
}
toString() {
console.log('2d function');
return `${this.x},${this.y}`;
}
};

创建Point3D类并继承Point2D,核心关键字extends, super

class Point3D extends Point2D {
constructor(x,y,z) {
super(x,y);// 如果没有super,则在constructor中不能使用this,其他方法中可以。
this.z = z;
}
toString(){
super.toString();
return `${this.x},${this.y},${this.z}`;
}
};

这样的继承方式比使用function继承来的更为直接和方便。

最后测试:

const p = new Point3D(1,2,3)
p.toString()

输出为:

这样使用super便实现了对父类方法的继承。

ES2015 类 class 语法的更多相关文章

  1. go类c语法

    go类c语法 一般来说,如果一门语言具有类c语法,意味着当你习惯使用其他类c语言例如c.c++.java.javascript和c#,然后你就会发现go语言和它们也类似,至少表面上是.例如,使用&am ...

  2. [C++]C++类基本语法

    本测试代码包括以下内容: (1)如何使用构造函数:(2)默认构造函数:(3)对象间赋值:(4)const使用语法:(5)定义类常量: 一种方法是用enum,另一种方法是使用static. #inclu ...

  3. ES2015 类中的静态方法

    在ES2015中,终于不用用函数原型来实现类系统,可以直接使用关键字class,下面是对class的静态属性的研究: 举例:一个Node类,每一个Node类之间都可以建立从属关系,每一个Node实例下 ...

  4. python类的语法和底层实现

    语法: class 类名: name = “egon”    # 类属性 def __init__(self): self.age = 18  # 对象属性 self.__sex = "fe ...

  5. C# 面向对象2 (类的语法)

    1.类 语法: [public] class 类名 { 字段; 属性; 方法; } **类名首字母必须大写 2.创建对象 创建这个类的对象过程称之为类的实例化,关键字:new this:表示当前这个类 ...

  6. 什么是静态内部(Static Inner)类,语法要注意什么?

    4静态内部类(Static Inner Classes) 马克-to-win:这里的内部类的static,意思是它可以不用实例化外部类,就自己单独被实例化,单独存在(有点像生活中的办公室和办公桌(独立 ...

  7. 类模板语法知识体系梳理(包含大量常犯错误demo,尤其滥用友元函数的错误)

    demo 1 #include <iostream> #include <cstdio> using namespace std; //template <typenam ...

  8. 【c++错误】类的语法错误 error c2533:constructors not allowed a return type(构造函数不允许返回一个类型)

    今天编写类的程序的时候不小心把类后的分号忘写了,就出现上面的错误提示. 顺便复习下类的正确格式: class 类名 { public: //习惯上将公有类型放在前面,便于阅读 ……(外部接口) pro ...

  9. python 类高级语法 静态方法

    通过@staticmethod装饰器即可把其装饰的方法变为一个静态方法,什么是静态方法呢?其实不难理解,普通的方法,可以在实例化后直接调用,并且在方法里可以通过self.调用实例变量或类变量,但静态方 ...

随机推荐

  1. eslint 入门项目搭建过程

    github 地址 : https://github.com/gebin/eslint-demo 运行该项目 npm install npm start 访问 http://localhost:900 ...

  2. MongoDB 搭建可复制群集

    一.概述 MongoDB复制群集支持节点故障自动切换,最小配置应包含3个节点,正常情况下应该至少包含两个数据节点,第三个节点可以是数据节点也可以是仲裁节点.仲裁节点的作用是当出现偶数节点导致无法仲裁的 ...

  3. kvm的安装使用技巧

    KVM参考网址 http://www.server110.com/kvm/201403/8321.html http://www.2cto.com/os/201511/451650.html http ...

  4. 测试任务汇总v1.0

    2017.08.04 整理了目前我们所在团队需要做的日常任务 定义为v1.0

  5. CentOS7上LNMP安装包一步搭建LNMP环境

    系统需求: CentOS/RHEL/Fedora/Debian/Ubuntu/Raspbian Linux系统 需要5GB以上硬盘剩余空间 需要128MB以上内存(如果为128MB的小内存VPS,Xe ...

  6. Qt 如何使用 lambda 表达式连接信号和槽?

    connect(camera, static_cast<void(QCamera::*)(QCamera::LockStatus, QCamera::LockChangeReason)>( ...

  7. openstack-ocata-身份验证2

    Identity service 一.身份服务概述 OpenStack身份管理服务提供一个单点集成身份验证.授权和目录服务. 身份服务通常是第一个服务用户与之交互.一旦身份验证,最终用户可以使用自己的 ...

  8. 普通权限拿webshell

    普通权限拿webshell:   1.0day拿webshell:这个不多说.可以去网上搜索一些, 比如你找到你搞的网站cms是discz的,你可以搜索一些相 关0day直接拿   2.修改网站上传类 ...

  9. java I/O框架 (二)文件操作(File)

    1.介绍 java io中最常操作的就是我们电脑中的文件,将这些文件以流的形式本地读写,或者上传到网络上.java中的File类就是对这些存储于磁盘上文件的虚拟映射,这也体现了java面向对象的思想, ...

  10. 影响JavaScript应用可扩展性因素

    引言:JavaScript 应用变得越来越庞大.这是因为使用JavaScript能做的事情远比我们大多数人所需求的要多得多.我们不能仅因为技术上可行,就去考虑软件系统的扩展问题.为一个不需要扩展的系统 ...