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

斯维坦·迪莫夫

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

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
TJ人群

如果您不提供显式构造函数,则在子类1中,JavaScript引擎将为您生成一个类似以下内容的构造器

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

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

class Mammal extends Animal {
}

与此相同:

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

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

这在§14.5.14:运行时语义:ClassDefinitionEvaluation的步骤10中定义

  1. 如果构造函数为空,则

    • 如果存在ClassHeritage opt,则

      • 构造函数成为解析源文本的结果

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

        使用语法语法和目标符号MethodDefinition

    • 别的,

      • 构造函数成为解析源文本的结果

        constructor( ){ }
        

        使用语法语法和目标符号MethodDefinition


1如上所示,如果它不是子类,则为constructor() { }

本文收集自互联网,转载请注明来源。

如有侵权,请联系[email protected] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Dev

为什么派生类需要使用基类构造函数

来自分类Dev

什么是基类构造函数,为什么要使用它?(带有示例)

来自分类Dev

为什么我需要使用 setter 和自定义构造函数?

来自分类Dev

为什么需要使用多个构造函数?

来自分类Dev

为什么使用声明生成的构造函数具有与基类相同的访问级别?

来自分类Dev

为什么要使用 list() 构造函数?

来自分类Dev

为什么要使用move构造函数?

来自分类Dev

为什么我需要使用函数签名扩展我的案例类才能在 Sparks rdd.mapPartition 中工作?

来自分类Dev

为什么我需要使用chroot

来自分类Dev

为什么我需要使用strdup()?

来自分类Dev

为什么React类组件始终需要在其构造函数中调用super(props)?

来自分类Dev

为什么需要使用unordered_map和tuple的默认构造函数?

来自分类Dev

(为什么)在纯虚拟派生类中是否需要虚拟基类构造函数调用?

来自分类Dev

为什么内联用户提供的构造函数odr使用基类构造函数?

来自分类Dev

为什么要在构造函数中实例化变量,以及为什么要使用属性来访问变量

来自分类Dev

为什么我需要使用额外的 `::` 前缀来访问导入的结构?

来自分类Dev

为什么需要使用http.StripPrefix访问我的静态文件?

来自分类Dev

为什么我需要使用“ this”来访问地图中的值?

来自分类Java

为什么还要使用空白的构造函数?

来自分类Dev

为什么要使用小数(int [])构造函数?

来自分类Dev

为什么要使用单独的加载方法而不是构造函数?

来自分类Dev

为什么要使用IFFE来构造函数

来自分类Dev

为什么我的Arduino类构造函数需要一个参数?

来自分类Dev

什么是lvmetad?为什么我要或需要使用它?

来自分类Dev

为什么我需要使用$()?目的是什么?

来自分类Dev

为什么不调用我的基类中的静态构造函数?

来自分类Java

我为什么不能访问在一个构造函数创建类的实例(JAVA)

来自分类Dev

为什么我需要强制转换才能从基类访问实际值?

来自分类Dev

为什么需要使用setTimeout的匿名函数来保留“ this”

Related 相关文章

  1. 1

    为什么派生类需要使用基类构造函数

  2. 2

    什么是基类构造函数,为什么要使用它?(带有示例)

  3. 3

    为什么我需要使用 setter 和自定义构造函数?

  4. 4

    为什么需要使用多个构造函数?

  5. 5

    为什么使用声明生成的构造函数具有与基类相同的访问级别?

  6. 6

    为什么要使用 list() 构造函数?

  7. 7

    为什么要使用move构造函数?

  8. 8

    为什么我需要使用函数签名扩展我的案例类才能在 Sparks rdd.mapPartition 中工作?

  9. 9

    为什么我需要使用chroot

  10. 10

    为什么我需要使用strdup()?

  11. 11

    为什么React类组件始终需要在其构造函数中调用super(props)?

  12. 12

    为什么需要使用unordered_map和tuple的默认构造函数?

  13. 13

    (为什么)在纯虚拟派生类中是否需要虚拟基类构造函数调用?

  14. 14

    为什么内联用户提供的构造函数odr使用基类构造函数?

  15. 15

    为什么要在构造函数中实例化变量,以及为什么要使用属性来访问变量

  16. 16

    为什么我需要使用额外的 `::` 前缀来访问导入的结构?

  17. 17

    为什么需要使用http.StripPrefix访问我的静态文件?

  18. 18

    为什么我需要使用“ this”来访问地图中的值?

  19. 19

    为什么还要使用空白的构造函数?

  20. 20

    为什么要使用小数(int [])构造函数?

  21. 21

    为什么要使用单独的加载方法而不是构造函数?

  22. 22

    为什么要使用IFFE来构造函数

  23. 23

    为什么我的Arduino类构造函数需要一个参数?

  24. 24

    什么是lvmetad?为什么我要或需要使用它?

  25. 25

    为什么我需要使用$()?目的是什么?

  26. 26

    为什么不调用我的基类中的静态构造函数?

  27. 27

    我为什么不能访问在一个构造函数创建类的实例(JAVA)

  28. 28

    为什么我需要强制转换才能从基类访问实际值?

  29. 29

    为什么需要使用setTimeout的匿名函数来保留“ this”

热门标签

归档