constructor メソッドは、class で作成されたオブジェクトの生成と初期化のための特殊なメソッドです。

構文

constructor([arguments]) { ... }

説明

"constructor" という名前の特殊なメソッドは、クラスに 1 個だけ持たせることができます。class に複数の constructor メソッドが含まれる場合、SyntaxError が投げられます。

constructor は、super キーワードを使用して親クラスの constructor を呼び出せます。

constructor メソッドを指定しなかった場合、既定のコンストラクタが使用されます。

constructor メソッドを使用する

このコードスニペットは、classes sample (ライブデモ) から転載しています。

class Square extends Polygon {
  constructor(length) {
    // Here, it calls the parent class' constructor with lengths
    // provided for the Polygon's width and height
    super(length, length);
    // Note: In derived classes, super() must be called before you
    // can use 'this'. Leaving this out will cause a reference error.
    this.name = 'Square';
  }

  get area() {
    return this.height * this.width;
  }

  set area(value) {
    this.area = value;
  } 
}

他の例

このコードスニペットを見てください。

class Polygon {
    constructor() {
        this.name = "Polygon";
    }
}

class Square extends Polygon {
    constructor() {
        super();
    }
}

class Rectangle {}

Object.setPrototypeOf(Square.prototype, Rectangle.prototype);

console.log(Object.getPrototypeOf(Square.prototype) === Polygon.prototype); //false
console.log(Object.getPrototypeOf(Square.prototype) === Rectangle.prototype); //true

let newInstance = new Square();
console.log(newInstance.name); //Polygon

ここでは Square クラスのプロトタイプは変更されていますが、square の新しいインスタンスが作成される時に前の基底クラスの Polygon が呼び出されています。

既定のコンストラクタ

constructor メソッドを指定しなかった場合、既定のコンストラクタが使用されます。基本クラスの既定のコンストラクタは次のようになります:

constructor() {}

派生クラスの既定のコンストラクタは次のようになります:

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

仕様

仕様 状況 コメント
ECMAScript 2015 (6th Edition, ECMA-262)
Constructor Method の定義
標準 初期定義。
ECMAScript Latest Draft (ECMA-262)
Constructor Method の定義
ドラフト  

ブラウザ実装状況

機能ChromeEdgeFirefoxInternet ExplorerOperaSafari
基本対応4911345 なし369
機能Android webviewChrome for AndroidEdge mobileFirefox for AndroidOpera AndroidiOS SafariSamsung Internet
基本対応 ? あり1345 ?9 あり

1. From Chrome 42 to 48 strict mode is required. Non-strict mode support can be enabled using the flag "Enable Experimental JavaScript".

関連項目

ドキュメントのタグと貢献者

このページの貢献者: Uemmra3, YuichiNukiyama, Marsf
最終更新者: Uemmra3,