super()和super(props)的主要区别在于是否传递props参数。
super():
- 当你在子类的构造函数中调用
super()
时,它会调用父类的构造函数,并将父类的实例化对象返回给子类的构造函数,使得子类可以访问父类的属性和方法。 - 如果父类有构造函数,并且需要在子类中做一些初始化工作,那么通常会在子类的构造函数中使用
super()
来调用父类的构造函数,确保父类的属性和方法正确地初始化。
class Parent {
constructor() {
this.parentProperty = 'Parent property';
}
}
class Child extends Parent {
constructor() {
super(); // 调用父类构造函数
this.childProperty = 'Child property';
}
}
const child = new Child();
console.log(child.parentProperty); // 输出: Parent property
console.log(child.childProperty); // 输出: Child property
super(props):
- 在 React 中,当你在子类的构造函数中调用
super(props)
时,它不仅会调用父类的构造函数,还会将props
对象传递给父类的构造函数。 - 这种用法通常在子类的构造函数需要访问
props
对象时使用,例如在初始化状态时可能会用到props
。
class ParentComponent extends React.Component {
constructor(props) {
super(props); // 在React中,调用父类构造函数并传递props
console.log(props.someProp); // 可以在构造函数中访问props
}
}
class ChildComponent extends ParentComponent {
constructor(props) {
super(props);
this.state = {
childState: props.initialState
};
}
}
总结:
super()
在普通 JavaScript 中用于调用父类构造函数,并获取父类的实例化对象。super(props)
在 React 中用于调用父类构造函数,并传递props
对象给父类构造函数,以便子类构造函数可以访问和使用这些props
。