gpt4 book ai didi

javascript - 为什么需要用super()访问基类构造函数?

转载 作者:行者123 更新时间:2023-11-30 11:53:29 25 4
gpt4 key购买 nike

为什么要在子类中引用基类的构造函数?无论哪种方式,我似乎都得到了相同的结果。

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

class Mammal extends Animal {}

let lion = new Mammal(3);
lion.age //=> 3

相对于

class Mammal extends Animal {
constructor(){
super(3)
}
}

let lion = new Mammal();
lion.age //=> 3

最佳答案

如果您不提供显式构造函数,在子类1 中,JavaScript 引擎将为您生成一个如下所示的构造函数:

constructor(...args) {
super(...args);
}

这就是您的第一个示例中发生的事情。所以这个:

class Mammal extends Animal {
}

与此相同:

class Mammal extends Animal {
constructor(...args) {
super(...args);
}
}

...只是第二个是显式的,而第一个是使用 JavaScript 引擎为您插入到类中的构造函数。

这是在 §14.5.14: Runtime Semantics: ClassDefinitionEvaluation 的第 10 步中定义的:

  1. If constructor is empty, then

    • If ClassHeritageopt is present, then

      • Let constructor be the result of parsing the source text

        constructor(... args){ super (...args);}

        using the syntactic grammar with the goal symbol MethodDefinition.

    • Else,

      • Let constructor be the result of parsing the source text

        constructor( ){ }

        using the syntactic grammar with the goal symbol MethodDefinition.


1 如果它不是子类,正如您在上面看到的,它只是 constructor() { }

关于javascript - 为什么需要用super()访问基类构造函数?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/38786205/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com