TypeScript 继承编译后的原型链结构是怎样的
typescript 的 class 继承在编译为 javascript 后,通过 __extends 辅助函数实现原型链连接。该函数将子类的原型对象 (prototype) 设置为父类原型对象的实例,从而建立原型链关系,使得子类实例可以访问父类原型上的方法。

class Animal {
constructor(public name: string) {}
move(distanceInMeters: number = 0) {
console.log(`${this.name} moved ${distanceInMeters}m.`);
}
}
class Dog extends Animal {
bark() {
console.log('Woof! Woof!');
}
}
const dog = new Dog('Rex');
dog.bark();
dog.move(10); // 调用父类方法上述代码中,Dog 继承自 Animal。编译后的 JS 会创建一个中间构造函数,其原型指向 Animal.prototype,从而实现原型链查找。
静态属性和方法是如何在原型链中处理的
TypeScript 中的静态属性和方法通过直接复制父类构造函数的属性到子类构造函数来实现,而不是通过原型链。这意味着静态成员不依赖于原型链查找,而是直接挂载在构造函数本身。

掌握 ES6+ 特性,包括 async/await、解构、扩展运算符、箭头函数、Promise、模块、迭代器、生成器以及函数式编程模式,编写简洁高效的 Java
立即学习“Java免费学习笔记(深入)”;
class Base {
static baseProp = 'base';
static baseMethod() { return 'base method'; }
}
class Derived extends Base {
static derivedProp = 'derived';
static derivedMethod() { return 'derived method'; }
}
console.log(Derived.baseProp); // 'base'
console.log(Derived.derivedProp); // 'derived'在编译后的代码中,__extends 还会执行类似 Object.setPrototypeOf(SubClass, SuperClass) 的操作,将父类构造函数赋值给子类的静态属性,从而支持静态成员的继承。
如果父类构造函数抛出异常会发生什么
如果父类构造函数在执行过程中抛出异常,子类构造函数的执行将被中断,且不会返回子类实例。此时,super() 调用点之后的代码不会执行,整个对象初始化失败。
class Parent {
constructor() {
if (true) throw new Error('Parent init failed');
}
}
class Child extends Parent {
constructor() {
super(); // 这里会抛出异常
this.prop = 'value'; // 这行不会执行
}
}在上述示例中,由于 Parent 构造函数抛出错误,Child 的实例化也会失败,this.prop 不会被赋值。这是 JavaScript 引擎层面的行为,TypeScript 编译器生成的代码遵循这一规则。

















