class

基线 广泛可用

此功能已得到良好建立,并且可在许多设备和浏览器版本上运行。它自以下时间起在所有浏览器中都可用 2017年3月.

class声明创建一个将新的绑定绑定到给定名称。

您还可以使用class表达式定义类。

试一试

语法

js
class name {
  // class body
}
class name extends otherName {
  // class body
}

描述

类声明的类体在严格模式中执行。class声明非常类似于let

  • class声明的作用域限定于块以及函数。
  • 只有在到达声明位置后才能访问class声明(请参阅暂时性死区)。因此,class声明通常被认为是未提升的(与函数声明不同)。
  • 当在脚本的顶层声明时,class声明不会在globalThis上创建属性(与函数声明不同)。
  • class声明不能被相同作用域中的任何其他声明重新声明

在类体之外,class声明可以像let一样重新赋值,但您应该避免这样做。在类体内部,绑定是像const一样的常量。

js
class Foo {
  static {
    Foo = 1; // TypeError: Assignment to constant variable.
  }
}

class Foo2 {
  bar = (Foo2 = 1); // TypeError: Assignment to constant variable.
}

class Foo3 {}
Foo3 = 1;
console.log(Foo3); // 1

示例

简单的类声明

在下面的示例中,我们首先定义一个名为Rectangle的类,然后扩展它以创建一个名为FilledRectangle的类。

请注意,在constructor中使用的super()只能在构造函数中使用,并且必须在可以使用this关键字之前调用。

js
class Rectangle {
  constructor(height, width) {
    this.name = "Rectangle";
    this.height = height;
    this.width = width;
  }
}

class FilledRectangle extends Rectangle {
  constructor(height, width, color) {
    super(height, width);
    this.name = "Filled rectangle";
    this.color = color;
  }
}

规范

规范
ECMAScript语言规范
# sec-class-definitions

浏览器兼容性

BCD 表格仅在启用 JavaScript 的浏览器中加载。

另请参阅