Get to know MDN better
このページはコミュニティーの尽力で英語から翻訳されました。MDN Web Docs コミュニティーについてもっと知り、仲間になるにはこちらから。
この機能は広く実装されており、多くのバージョンの端末やブラウザーで動作します。2016年3月以降、すべてのブラウザーで利用可能です。
constructor メソッドは、クラスで作成されたオブジェクトインスタンスの生成と初期化を行うための特殊なメソッドです。
メモ: このページでは constructor の構文を紹介します。すべてのオブジェクトに存在する constructor プロパティについては、 Object.prototype.constructor を参照してください。
追加の構文上の制約があります。
コンストラクターを使用すると、インスタンス化されたオブジェクトに対して、他のメソッドを呼び出す前に行う必要のある独自の初期化を行うことができます。
独自のコンストラクターを提供しなかった場合は、既定のコンストラクターが提供されます。クラスが基底クラスである場合、既定のコンストラクターは空です。
クラスが派生クラスの場合、既定のコンストラクターが親コンストラクターを呼び出し、与えられた引数を渡します。
それがこのようなコードを動作させることができます。
ValidationError クラスは、独自の初期化を行う必要がないため、明示的なコンストラクターは必要ありません。 既定のコンストラクターは、与えられた引数から親の Error の初期化を行います。
ただし、独自のコンストラクターを提供し、クラスが親クラスから派生している場合は、 super() を使用して親クラスのコンストラクターを明示的に呼び出す必要があります。 例えば、以下のようになります。
クラスで new を使用すると、以下の段階を踏みます。
constructor 本体の中では、 this で作成されるオブジェクトにアクセスしたり new で呼び出されるクラスに new.target でアクセスしたりすることができます。メソッド(ゲッター、セッターを含む)とプロトタイプチェーン は constructor が実行される前に this で初期化されているので、スーパークラスのコンストラクターからサブクラスのメソッドにアクセスすることもできることに注意してください。しかし、これらのメソッドが this を使用している場合、 this はまだ完全に初期化されていません。これは、派生クラスのパブリックフィールドを読むと undefined になり、プライベートフィールドを読むと TypeError になるということです。
constructor メソッドは返値を持つことができます。基底クラスはコンストラクターから何らかの値を返すことができますが、派生クラスはオブジェクトまたは undefined を返すか、 TypeError を発生させなければなりません。
親クラスのコンストラクターがオブジェクトを返した場合、そのオブジェクトは派生クラスのクラスフィールドを定義する際の値として使用します。このトリックは「返値の上書き」と呼ばれ、派生クラスのフィールド(プライベートなものも含む)を無関係なオブジェクトに定義することができます。
constructor は通常のメソッド構文に従うので、デフォルト引数や残余引数などをすべて使用することができます。
コンストラクターはリテラル名でなければなりません。算出プロパティ名はコンストラクターにはなれません。
非同期メソッド、ジェネレーターメソッド、アクセサ、クラスフィールドは constructor と名付けることは禁止されています。プライベートな名前を #constructor と呼び出すことはできません。 constructor という名前のメンバーはプレーンなメソッドでなければなりません。
このコードスニペットは、classes sample (ライブデモ) から転載しています。
super() は現在のクラスのプロトタイプであるコンストラクターを呼び出します。現在のクラスのプロトタイプを変更した場合、 super() は新しいプロトタイプのコンストラクターを呼び出します。現在のクラスの prototype プロパティを変更しても、 super() が呼び出すコンストラクターには影響しません。
| ECMAScript® 2027 Language Specification # sec-static-semantics-constructormethod |
ブラウザー互換性一覧表を表示するには、JavaScript を有効にしてください。
より良いインターネットのための青写真。
このコンテンツの一部は、©1998–2026 個人の mozilla.org 協力者です。コンテンツはクリエイティブ・コモンズ・ライセンスのもとで利用できます。