JavaScript:为什么在子类构造函数中JS引擎不会自动调用super()?

时间:2017-04-05 11:53:13

标签: javascript class ecmascript-6

在JavaScript ES6中,如果在访问super()之前必须始终在子类构造函数中调用this,为什么JS引擎不会自动调用它?

请举个例子:

class Animal {
  constructor (name) {
    this.name = name;
  }
}

class Dog extends Animal {
  constructor (name, breed) {
    super();
    this.breed = breed;
  }
}

难道不是吗?

class Dog extends Animal {
  constructor (name, breed) {
    this.breed = breed;
  }
}

我的意思是,我知道第二个示例不起作用,但为什么JS中没有构建此功能来自动化该过程?为什么我们每次都要输入{​​{1}}?是否存在特定的语言设计约束,否则会破坏事物?

1 个答案:

答案 0 :(得分:2)

那是因为基础构造函数可能包含参数,在这种情况下,您必须按照自己喜欢的方式调用super()

除此之外,只考虑纯OOP,可能会有各种基本构造函数具有不同的签名,这些构造函数将由您控制。自动化这个过程是不切实际的。