typescript 的 class 编译为 es5 后本质是带原型链的构造函数:实例属性在 constructor 中赋值给 this,实例方法挂载到 prototype,静态成员直接赋值给构造函数,继承通过 object.setprototypeof 模拟。

TypeScript 中的 class 在编译为 ES5 时,本质会被重写为一个带原型链的构造函数,所有实例成员、方法和静态成员都会被显式挂载到函数对象或其 prototype 上。
构造函数本体对应 class 的 constructor
TS 中 constructor() 内部的赋值语句(如 this.prop = "prop")会直接出现在生成的 ES5 函数体开头。这个函数就是运行时真正的构造函数,调用 new MyClass() 实际执行的就是它。
- 所有在 constructor 中初始化的实例属性,都变成函数体内对
this.xxx的直接赋值 - 如果 constructor 有参数,它们会作为函数形参保留,类型注解被完全擦除
- 没有显式 constructor 时,TS 会生成一个空函数体
实例方法被挂载到 prototype 上
TS 中声明的普通方法(如 method() {})不会出现在构造函数内部,而是通过 MyClass.prototype.method = function() {} 的方式添加到原型上。
完整的Galileo AI平台 TypeScript/JS SDK 参考,用于评估、观察和保护 GenAI 应用。适用于构建 Node.js 或 TypeScript 项目。
- 这样确保所有实例共享同一份方法定义,节省内存
- 箭头函数写法(
method = () => {})属于实例属性,会在 constructor 中绑定为this.method = function() {},不走 prototype - 访问修饰符(
private/protected)仅在编译期检查,ES5 输出中不体现
静态成员直接挂在构造函数对象上
TS 中用 static 声明的属性和方法,在 ES5 中变为对构造函数对象本身的赋值,例如 MyClass.static_prop = "static_prop" 和 MyClass.static_method = function() {}。
- 静态属性和方法与实例完全隔离,不能通过
this访问 - 它们在构造函数声明后立即赋值,顺序和 TS 源码中声明顺序一致
- 静态字段初始化(ES2022+ 特性)若开启
useDefineForClassFields,会转为Object.defineProperty调用
继承关系靠 Object.setPrototypeOf 或 __proto__ 模拟
当使用 extends 时,TS 编译器会插入辅助函数(如 __extends),用 Object.setPrototypeOf(SubClass, SuperClass) 设置静态继承,并用 Object.setPrototypeOf(SubClass.prototype, SuperClass.prototype) 连接原型链。
- ES5 不支持原生
class extends,所以必须手动修正原型指向 - 子类 constructor 内部会显式调用
_super.apply(this, arguments)来执行父类初始化 - 装饰器、私有字段(#prop)等新特性需额外 polyfill 或降级策略,不包含在基础 ES5 输出中
Java免费学习笔记:立即使用
解锁 Java 大师之旅:从入门到精通的终极指南










