类表达式

**class**关键字可用于在表达式内定义类。

您还可以使用class声明来定义类。

试一试

语法

js
class {
  // class body
}
class name {
  // class body
}

注意:表达式语句不能以class关键字开头,以避免与class声明产生歧义。只有当class关键字出现在无法接受语句的上下文中时,它才会开始一个表达式。

描述

class表达式与class声明非常相似,并且语法几乎相同。与class声明一样,class表达式的主体在严格模式下执行。class表达式和class声明之间的主要区别在于类名,在class表达式中可以省略类名以创建匿名类。类表达式允许您重新定义类,而使用class声明重新声明类会抛出SyntaxError。有关更多信息,另请参阅有关的章节。

示例

一个简单的类表达式

这只是一个简单的匿名类表达式,您可以使用变量Foo引用它。

js
const Foo = class {
  constructor() {}
  bar() {
    return "Hello World!";
  }
};

const instance = new Foo();
instance.bar(); // "Hello World!"
Foo.name; // "Foo"

命名类表达式

如果要在类主体内部引用当前类,则可以创建一个命名类表达式。该名称仅在类表达式本身的作用域内可见。

js
const Foo = class NamedFoo {
  constructor() {}
  whoIsThere() {
    return NamedFoo.name;
  }
};
const bar = new Foo();
bar.whoIsThere(); // "NamedFoo"
NamedFoo.name; // ReferenceError: NamedFoo is not defined
Foo.name; // "NamedFoo"

规范

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

浏览器兼容性

BCD表格仅在浏览器中加载

另请参阅