如何创建类_Javascript的ES6类语法是什么

ES6的class是基于原型的语法糖,需用new实例化且不提升;支持static静态成员、extends继承及super调用父类。

ES6 引入了 class 关键字,让 JavaScript 的面向对象写法更接近传统语言(如 Java、C#),但它本质上仍是基于原型的语法糖,并不改变底层机制。

基本类声明与构造函数

使用 class 声明一个类,内部用 constructor() 定义初始化逻辑:

  • 类名首字母通常大写(约定,非强制)
  • constructor 是唯一必需的方法,用于创建实例时初始化属性
  • 方法之间不用逗号分隔,也不需要 function 关键字

示例:

class Person {
  constructor(name, age) {
    this.name = name;
    this.age = age;
  }
  sayHello() {
    console.log(`Hello, I'm ${this.name}`);
  }
}

实例化与方法调用

new 操作符创建实例,然后直接调用实例方法:

  • 必须用 new 调用类,否则报错(不同于普通函数)
  • 类内部定义的方法默认添加到原型上,所有实例共享
  • 类声明不会被提升(与 function 声明不同),必须先定义后使用

示例:

const alice = new Person('Alice', 30);
alice.sayHello(); // "Hello, I'm Alice"

静态方法与属性

static 关键字定义静态成员,只能通过类名访问,不能在实例上调用:

  • static method():常用于工具函数或工厂方法
  • ES2025+ 支持公有静态字段(static prop = value
  • 静态方法中 this 指向类本身,不是实例

示例:

class MathUtils {
  static PI = 3.14159;
  static double(x) { return x * 2; }
}
console.log(MathUtils.PI); // 3.14159
console.log(MathUtils.double(5)); // 10

继承与 super 关键字

extends 实现类继承,子类中通过 super() 调用父类构造函数,用 super.method() 调用父类方法:

  • 子类构造函数中若使用 this,必须先调用 super()
  • 可重写父类方法(覆盖),也可在重写中用 super.xxx() 复用逻辑
  • 支持多层继承(A → B → C)

示例:

class Student extends Person {
  constructor(name, age, grade) {
    super(name, age); // 必须先调用
    this.grade = grade;
  }
  sayHello() {
    super.sayHello();
    console.log(`I'm in grade ${this.grade}`);
  }
}