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);
    }
}

... 2つ目は明示的であるのに対し、1つ目はJavaScriptエンジンによってクラスに挿入されたコンストラクターを使用しているだけです。

これは、§14.5.14のステップ10で定義されています。ランタイムセマンティクス:ClassDefinitionEvaluation

  1. 場合は、コンストラクタは空で、その後、

    • 場合ClassHeritageのoptが存在し、その後、

      • ましょう、コンストラクタは、ソーステキストを解析した結果であります

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

        目標記号MethodDefinitionで構文文法を使用します。

    • そうしないと、

      • ましょう、コンストラクタは、ソーステキストを解析した結果であります

        constructor( ){ }
        

        目標記号MethodDefinitionで構文文法を使用します。


1上記のように、サブクラスでない場合は、単にconstructor() { }

この記事はインターネットから収集されたものであり、転載の際にはソースを示してください。

侵害の場合は、連絡してください[email protected]

編集
0

コメントを追加

0

関連記事

分類Dev

派生クラスが基本クラスコンストラクターを使用する必要があるのはなぜですか

分類Dev

なぜreactクラスコンポーネントは常にコンストラクターでsuper(props)を呼び出す必要があるのですか?

分類Dev

派生クラスのコピーコンストラクターを定義するには、基本クラスのデフォルトコンストラクターを定義する必要があるのはなぜですか?

分類Dev

このポインタを介してテンプレートの基本クラスメンバーにアクセスする必要があるのはなぜですか?

分類Dev

なぜ「* p = a」を使用する必要があり、「p =&a」を使用してもコンストラクターでは機能しないのはなぜですか

分類Dev

コピーコンストラクターを明示的に非インラインとして宣言する必要があるのはなぜですか?

分類Dev

なぜ複数のコンストラクターを使用する必要があるのでしょうか。

分類Dev

クラスのコンストラクターでサブクラスを初期化するために、クラスのサブクラスクラスが静的である必要があるのはなぜですか?

分類Dev

「this」とは異なり、「super」がクラスインスタンスではなく親クラスを参照しているにもかかわらず、静的コンテキストから「super」変数を使用できないのはなぜですか?

分類Dev

コンストラクターをクラススコープに含める必要があるのはなぜですか?

分類Dev

変換コンストラクターでこれを参照する必要があるのはなぜですか?

分類Dev

Javascriptでは、参照型のインスタンス変数をコンストラクターに配置する必要があるのはなぜですか?

分類Dev

コピーコンストラクタがconstである必要があるのはなぜですか?

分類Dev

サブクラスコンストラクター-サブクラスコンストラクターにデフォルトのコンストラクターが存在する必要があるのはなぜですか?

分類Dev

コンストラクターにクラスの名前を正確に付ける必要があるのはなぜですか?

分類Dev

「エラー:アクションはプレーンオブジェクトである必要があります。非同期アクションにはカスタムミドルウェアを使用してください。」というメッセージが表示されるのはなぜですか。エラー?

分類Dev

コンストラクターで実際のクラスオブジェクトの代わりにインターフェイスタイプのオブジェクトを使用する必要があるのはなぜですか

分類Dev

Stringクラスにコピーコンストラクタがあるのはなぜですか?

分類Dev

仮想基本クラスを使用すると、コピーコンストラクターの動作が変わるのはなぜですか

分類Dev

JavaScriptでコンストラクターをカスタムエラータイプに戻す必要があるのはなぜですか

分類Dev

Kotlin:コンストラクターでフィールドを「var」/「val」として定義する必要があるのはなぜですか?

分類Dev

FilterInputStreamとFilterOutputStreamのコンストラクターに異なるアクセス修飾子があるのはなぜですか?

分類Dev

FilterInputStreamとFilterOutputStreamのコンストラクターに異なるアクセス修飾子があるのはなぜですか?

分類Dev

空のコンストラクタc ++を定義する必要があるのはなぜですか

分類Dev

コントローラがWebPHP MVCのモデルにアクセスする必要があるのはなぜですか?

分類Dev

プライベート基本クラスの宣言があると、型名にアクセスできなくなるのはなぜですか?

分類Dev

コンソールにエラーが表示されるのはなぜですか:アクティベータースロットは、すでにバインドしているのにバインドする必要がありますか?

分類Dev

コンストラクターをconstexprとして設定する必要があるのはいつですか?

分類Dev

配列へのポインタを期待する関数に実際のパラメータとして配列を送信するには、配列にアクセスするために2回逆参照する必要があるのはなぜですか?

Related 関連記事

  1. 1

    派生クラスが基本クラスコンストラクターを使用する必要があるのはなぜですか

  2. 2

    なぜreactクラスコンポーネントは常にコンストラクターでsuper(props)を呼び出す必要があるのですか?

  3. 3

    派生クラスのコピーコンストラクターを定義するには、基本クラスのデフォルトコンストラクターを定義する必要があるのはなぜですか?

  4. 4

    このポインタを介してテンプレートの基本クラスメンバーにアクセスする必要があるのはなぜですか?

  5. 5

    なぜ「* p = a」を使用する必要があり、「p =&a」を使用してもコンストラクターでは機能しないのはなぜですか

  6. 6

    コピーコンストラクターを明示的に非インラインとして宣言する必要があるのはなぜですか?

  7. 7

    なぜ複数のコンストラクターを使用する必要があるのでしょうか。

  8. 8

    クラスのコンストラクターでサブクラスを初期化するために、クラスのサブクラスクラスが静的である必要があるのはなぜですか?

  9. 9

    「this」とは異なり、「super」がクラスインスタンスではなく親クラスを参照しているにもかかわらず、静的コンテキストから「super」変数を使用できないのはなぜですか?

  10. 10

    コンストラクターをクラススコープに含める必要があるのはなぜですか?

  11. 11

    変換コンストラクターでこれを参照する必要があるのはなぜですか?

  12. 12

    Javascriptでは、参照型のインスタンス変数をコンストラクターに配置する必要があるのはなぜですか?

  13. 13

    コピーコンストラクタがconstである必要があるのはなぜですか?

  14. 14

    サブクラスコンストラクター-サブクラスコンストラクターにデフォルトのコンストラクターが存在する必要があるのはなぜですか?

  15. 15

    コンストラクターにクラスの名前を正確に付ける必要があるのはなぜですか?

  16. 16

    「エラー:アクションはプレーンオブジェクトである必要があります。非同期アクションにはカスタムミドルウェアを使用してください。」というメッセージが表示されるのはなぜですか。エラー?

  17. 17

    コンストラクターで実際のクラスオブジェクトの代わりにインターフェイスタイプのオブジェクトを使用する必要があるのはなぜですか

  18. 18

    Stringクラスにコピーコンストラクタがあるのはなぜですか?

  19. 19

    仮想基本クラスを使用すると、コピーコンストラクターの動作が変わるのはなぜですか

  20. 20

    JavaScriptでコンストラクターをカスタムエラータイプに戻す必要があるのはなぜですか

  21. 21

    Kotlin:コンストラクターでフィールドを「var」/「val」として定義する必要があるのはなぜですか?

  22. 22

    FilterInputStreamとFilterOutputStreamのコンストラクターに異なるアクセス修飾子があるのはなぜですか?

  23. 23

    FilterInputStreamとFilterOutputStreamのコンストラクターに異なるアクセス修飾子があるのはなぜですか?

  24. 24

    空のコンストラクタc ++を定義する必要があるのはなぜですか

  25. 25

    コントローラがWebPHP MVCのモデルにアクセスする必要があるのはなぜですか?

  26. 26

    プライベート基本クラスの宣言があると、型名にアクセスできなくなるのはなぜですか?

  27. 27

    コンソールにエラーが表示されるのはなぜですか:アクティベータースロットは、すでにバインドしているのにバインドする必要がありますか?

  28. 28

    コンストラクターをconstexprとして設定する必要があるのはいつですか?

  29. 29

    配列へのポインタを期待する関数に実際のパラメータとして配列を送信するには、配列にアクセスするために2回逆参照する必要があるのはなぜですか?

ホットタグ

アーカイブ