Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/454.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 您可以在ES6中的扩展类中使用不同的构造函数参数吗?_Javascript_Ecmascript 6_Es6 Class - Fatal编程技术网

Javascript 您可以在ES6中的扩展类中使用不同的构造函数参数吗?

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) {

当我使用具有不同参数的构造函数时,Visual Studio代码中会出现警告。扩展类中的参数是否需要与超级类相同

类别:

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。不过,我没有收到任何警告。是的,你可以使用不同的签名,但我会。在这方面,像对待任何其他方法一样对待构造函数-您可以添加可选参数,但不应更改现有参数的含义。还值得注意的是,警告很有意义。您正在声明您扩展了选项,而选项有一个构造函数来执行某些操作。因此,从逻辑上讲,任何继承的选项都需要在准备使用之前运行构造函数逻辑。超级调用不是自动的,因为您可能并不总是希望它出现在构造函数的开头,可能是因为您从一些错误处理开始,所以您必须手动添加该调用以确保逻辑运行,否则您的选项子类没有完全初始化。