在Angular中,当在派生类的构造函数中访问'this'之前必须调用'super'。这是因为派生类必须先调用基类的构造函数,以确保正确初始化对象。
下面是一个示例,演示如何解决这个问题:
class BaseClass {
constructor() {
console.log("BaseClass constructor");
}
}
class DerivedClass extends BaseClass {
constructor() {
// 在访问'this'之前调用'super'
super(); // 调用基类的构造函数
console.log("DerivedClass constructor");
}
}
const instance = new DerivedClass();
在这个示例中,派生类DerivedClass继承自基类BaseClass。在DerivedClass的构造函数中,我们必须先调用'super'来调用基类的构造函数,然后才能访问'this'。
当创建DerivedClass的实例时,它的构造函数将打印出"BaseClass constructor"和"DerivedClass constructor"。这证明了基类的构造函数通过调用'super'被正确地调用了。
请注意,在Angular中,当使用派生类来扩展组件或指令时,也必须始终在构造函数中调用'super'。这是因为Angular的组件和指令类都是派生自Angular的基类,它们需要在构造函数中调用基类的构造函数以进行必要的初始化。