javascript 中可通过 class 表达式创建匿名类,即以 class 开头、不写类名、直接跟花括号的语法,如 const cls = class { };,它不污染作用域,可赋值、传参、立即实例化,行为类似匿名函数表达式。

JavaScript 中不能直接用“表达式形式定义匿名类”这种说法,因为 class 本身是**声明式语法**,不是表达式;但你可以用 **class 表达式(class expression)** 创建一个没有名字的类,并赋值给变量或作为参数传递——这通常就是大家说的“匿名类”。
class 表达式就是匿名类的写法
class 表达式以 class 开头,后面**不跟类名**,直接跟花括号:
const MyComponent = class {
constructor(name) {
this.name = name;
}
greet() {
return `Hello, ${this.name}`;
}
};
<p>console.log(new MyComponent('Alice').greet()); // "Hello, Alice"
</p>
这个 class { ... } 就是匿名类表达式。它不会污染作用域(不像 class A {} 声明会绑定标识符 A),且可以立即使用、传参、返回,行为上类似函数表达式。
常见用途:立即实例化、工厂函数、动态类
-
立即创建并实例化:
const instance = new (class { method() { return 'done'; } })(); -
作为工厂函数返回不同类:
function createLogger(level) {<br> return class {<br> log(msg) { console[level](msg); }<br> }<br>}
然后new (createLogger('warn'))().log('oops') -
在对象方法或回调中临时定义行为:
比如测试时快速构造一个带特定toString的类,避免全局声明。
注意:匿名类没有 .name,但可被调试器识别
匿名 class 表达式的 constructor.name 是空字符串:(class {}).name === ""。
不过现代 DevTools(如 Chrome)通常会显示为 "class" 或根据上下文推断(比如变量名 MyComponent),不影响调试。
和函数表达式类比,理解更自然
就像:const fn = function() {}; 是匿名函数表达式,const Cls = class {}; 就是匿名类表达式。
两者都属于“赋值即定义”,不具名、可复用、可嵌套、可立即调用(类需用 new)。
不复杂但容易忽略:class 表达式才是实现“运行时动态类”的标准方式,比 eval 或字符串拼接安全得多。
Java免费学习笔记:立即使用
解锁 Java 大师之旅:从入门到精通的终极指南











