性能差异可忽略,class与构造函数底层机制一致、执行路径相同,引擎优化相当;微小初始化开销(如new检查、super验证)仅纳秒级;真正影响性能的是代码逻辑而非语法选择。

性能差异非常小,实际项目中基本可以忽略。
底层机制一致,执行路径几乎相同
Class 和构造函数最终都依赖原型链实现继承,运行时没有本质区别。无论是 extends + super() 还是 Object.create(Parent.prototype) + Parent.call(this),生成的对象结构、属性查找链、方法调用开销都高度一致。V8 等主流引擎对两者做了同等优化,包括内联缓存(IC)和隐藏类(Hidden Class)的构建逻辑。
初始化阶段的微小开销差异
Class 在实例化时有极轻微的额外检查:
- 强制使用 new 调用(否则抛错),而构造函数无此限制;
- super() 内部会做一次原型链绑定验证,比手动 Parent.call(this) 多一两步内部调用;
- Class 的 constructor 方法默认不可枚举,遍历对象时略快,但这不影响运行时性能。
这些差异在单次调用中约为纳秒级,百万次实例化累计也难以测出明显差距。
真正影响性能的是写法,不是语法
导致性能落差的往往不是 class 或 function 本身,而是开发者习惯:
- 在 class 的 constructor 中执行大量同步计算或 DOM 操作;
- 在继承链中反复重写同名方法却不复用父类逻辑;
- 用 Object.assign 或深拷贝初始化大量属性,无论 class 还是函数都会变慢。
换句话说,写得“重”的 class 可能比写得“轻”的构造函数还快——关键在逻辑组织,不在关键字。
不复杂但容易忽略:选 class 还是函数,主要看可读性、团队规范和继承清晰度,而不是性能。











