ホームページ >ウェブフロントエンド >フロントエンドQ&A >es6 での super の使用法は何ですか

es6 での super の使用法は何ですか

WBOY
WBOYオリジナル
2022-05-05 18:11:142379ブラウズ

super の使用法: 1. super を関数として使用する場合、親クラスのコンストラクターを表すために使用されます。構文は "constructor(){super();}" です。 super はオブジェクトとして使用され、通常のメソッドで使用され、親クラスのプロトタイプ オブジェクトを指すために使用され、静的メソッドで親クラスを指すために使用されます。

es6 での super の使用法は何ですか

このチュートリアルの動作環境: Windows 10 システム、ECMAScript バージョン 6.0、Dell G3 コンピューター。

es6 での super の使用法は何ですか

最初のケース: super が関数として使用される場合、親クラスのコンストラクターを表します

ES6 要件、サブクラスのコンストラクターはスーパー関数を 1 回実行する必要があります

class A {}
class B extends A {
  constructor() {
    super();//子类的构造函数,必须执行一次super函数,代表父类的构造函数
  }
}

注: スーパーは親クラスのコンストラクターを表しますが、このときに返されるインスタンスは B のインスタンスです。 super 内の this は B のインスタンスを参照するため、 super() は A.prototype.constructor.call(this)

class A {
  constructor() {
    console.log(new.target.name);
  }
}
class B extends A {
  constructor() {
    super();
  }
}
new A() // A
new B() // B

と同等になります。上記のコードでは、 new.target は現在実行中の関数を指します。 super() が実行されると、親クラス A のコンストラクターではなく、子クラス B のコンストラクターを指します。 つまり、super() 内のこれは B

を指します。 super が関数として使用される場合、サブクラスのコンストラクターに出現する必要があります。そうでない場合、エラーが報告されます。

class A {}
class B extends A {
  m() {
    super(); // 报错
  }
}

2 番目のケース: super がオブジェクトとして使用される場合、通常のメソッドでは、それは次のプロトタイプ オブジェクトを指します。親クラスを指し、静的メソッドでは親クラスを指します

class A {
  p() {
    return 2;
  }
}
class B extends A {
  constructor() {
    super();//父类的构造函数
    console.log(super.p()); // 2
  }
}
let b = new B();

上記のコードで、super が関数として使用されている場合、親クラスの構築メソッドを表します。オブジェクトとしては、親クラスのプロトタイプ オブジェクト、つまり A.prototype を指すため、super.p() は A.prototype.p()

ここでも注意する必要があります。 super は親クラスのプロトタイプを指しているため、親クラス インスタンスのプロパティやメソッドは super

class A {
  constructor() {
    this.p = 2;
  }
}
class B extends A {
  get m() {
    return super.p;
  }
}
let b = new B();
b.m // undefined

を通じて呼び出すことはできません。上記のコードでは、p は親クラス A です。インスタンスの属性は呼び出すことができません。 super.p

属性が親クラスのプロトタイプで定義されている場合、super

class A {}
A.prototype.x = 2;
class B extends A {
  constructor() {
    super();
    console.log(super.x) // 2
  }
}
let b = new B();

を使用してアクセスできます。上記のコードでは、属性 x はプロトタイプで定義されています親クラスのオブジェクトにアクセスするには、super.x を使用します。

[関連する推奨事項: JavaScript ビデオ チュートリアル Web フロントエンド ]

以上がes6 での super の使用法は何ですかの詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

声明:
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。