Javascript 您可以在ES6中的扩展类中使用不同的构造函数参数吗?
当我使用具有不同参数的构造函数时,Visual Studio代码中会出现警告。扩展类中的参数是否需要与超级类相同 类别:Javascript 您可以在ES6中的扩展类中使用不同的构造函数参数吗?,javascript,ecmascript-6,es6-class,Javascript,Ecmascript 6,Es6 Class,当我使用具有不同参数的构造函数时,Visual Studio代码中会出现警告。扩展类中的参数是否需要与超级类相同 类别: class Options { constructor(name = null) { this.name = name; } } class ExtendedClass extends Options { constructor(colors = null, option = false) { if (colors!=null) {
class Options {
constructor(name = null) {
this.name = name;
}
}
class ExtendedClass extends Options {
constructor(colors = null, option = false) {
if (colors!=null) {
this.numberOfColors = colors;
}
this.option = option;
}
}
更新:
看起来使用不同的参数并不重要,但问题是调用super才是问题所在?需要进行更多测试,但问题似乎在于此:
class ExtendedClass extends Options {
constructor(colors = null, option = false) {
super();
if (colors!=null) {
this.numberOfColors = colors;
}
this.option = option;
}
}
扩展类[constructor]中的参数是否需要与超级类[constructor]相同
简短回答:没有
但是,super需要与super类构造函数相同的参数。super使用提供的参数调用超级类构造函数。Ok。不过,我没有收到任何警告。是的,你可以使用不同的签名,但我会。在这方面,像对待任何其他方法一样对待构造函数-您可以添加可选参数,但不应更改现有参数的含义。还值得注意的是,警告很有意义。您正在声明您扩展了选项,而选项有一个构造函数来执行某些操作。因此,从逻辑上讲,任何继承的选项都需要在准备使用之前运行构造函数逻辑。超级调用不是自动的,因为您可能并不总是希望它出现在构造函数的开头,可能是因为您从一些错误处理开始,所以您必须手动添加该调用以确保逻辑运行,否则您的选项子类没有完全初始化。