我想使用super的构造函数将子类实例传递给超类,但出现此错误
class Parent
{
constructor(child)
{
this.child = child;
}
//...somewhere in code
//child.doSomething();
}
class Child extends Parent
{
constructor()
{
super(this); // <==== the error here
}
doSomething = () =>
{
//...
}
}
在超类构造函数调用之前不允许这样做
为什么,我也收到此错误,还如何我可以解决此问题
os.walk
答案 0 :(得分:3)
无需将this
传递给super()
,因为超类构造函数中的this
将是对同一对象的引用。回想一下,您的类层次结构将合作对单个新对象执行初始化。
对super()
的调用必须先于对this
的引用,包括在super()
参数列表中。为什么?因为为了模仿其他OO语言的行为,必须这样一种情况:类层次结构中最顶层的初始化程序首先要使用新对象。父(或“高级”)初始化器应能够假定该级别的原型方法具有基类期望的语义,因为它不“知道”子类可能对其原型进行了什么处理等。可以修改新对象并覆盖基类原型方法(或其他类似方法),否则会很混乱。
答案 1 :(得分:2)
在子级的构造函数方法中,必须在访问this
之前调用父级的构造函数。由于您正在构造超类的实例,因此无论如何,超类的构造函数将可以访问this
,尽管它无法访问子构造函数可能进行的任何其他初始化。