Ali*_*Ali 0 javascript ecmascript-6 es6-class
我想使用 super 的构造函数将子类实例传递给超类,但出现此错误
super(this);
Run Code Online (Sandbox Code Playgroud)
这在超类构造函数调用之前是不允许的
为什么我收到这个错误,我该如何解决这个问题
class Parent
{
constructor(child)
{
this.child = child;
}
//...somewhere in code
//child.doSomething();
}
class Child extends Parent
{
constructor()
{
super(this); // <==== the error here
}
doSomething = () =>
{
//...
}
}
Run Code Online (Sandbox Code Playgroud)
没有必要传递this
给,super()
因为this
在超类构造函数内部将是对同一对象的引用。回想一下,您的类层次结构将协作对单个新对象执行初始化。
对 的调用super()
必须出现在对 的任何引用之前this
,包括在super()
参数列表中。为什么?因为为了模仿其他 OO 语言的行为,必须是类层次结构中最顶层的初始化程序首先处理新对象。父(或“高级”)初始化器应该能够假设该级别的原型方法具有基类所期望的语义,因为它不“知道”子类可能对其原型做了什么等。如果子类初始化器可以修改新对象并覆盖基类原型方法(或其他类似的方法),这会很混乱。
归档时间: |
|
查看次数: |
764 次 |
最近记录: |