概述

从功能上讲class更像是新引进的语法糖,而不是字面上理解的基于原型的新继承实现。

定义与实例化

示例

// 定义
class Greet {
  // 构造函数
  constructor (message) {
    this.message = message;
  }
  
  greeting () {
    console.log(this.message);
  }
}
==== 代码说明 ====
  * ES6中的class只包含方法,不包括属性
  * constructor方法是class的默认方法,通过new命令生成实例时,会自动调用该方法
  * 与ES5一样,类的所有实例共享一个原型对象

===== 类继承 =====
==== 示例 ====
<code>
class GreetWithName extends Greet {
  constructor (message, name) {
    super(message);
    this.name = name;
  }
  
  greeting () {
    console.log(this.message + " my name is " + this.name);
  }
}

代码说明

  • 使用关键之extends指明父类
  • 使用super方法调用父类的方法

单实例与静态方法

class Greet {
  constructor (message) {
    if (!(this instanceof Greet)) {
      return new Greet(message);
    }
    this.message = message;
  }
  static describe () {
    console.log("just is a greeting for you!")
  }
}
Greet.describe();

代码说明

  • 通过在构造函数中返回实例的方法,实现单例模式
  • 使用static关键字,声明静态方法