class 宣言は、プロトタイプベースの継承を使って、名前付きで新しいクラスを作成します。

class 式を使ってクラスを定義することもできます。しかし、class 式と異なり、class 宣言は既存のクラスを再宣言できず、再宣言しようとすると型エラーになります。

構文

class name [extends] {
  // class body
}

説明

class 式と同様、class 宣言の内部は strict モード で実行されます。コンストラクタプロパティはオプションです。

class 宣言は、(function 宣言と違って) hoisted されません。

単純な class 宣言

次の例では、はじめに Polygon という名前のクラスを定義し、次にそれを拡張して Square という名前のクラスを作成します。コンストラクタで使われている super() は、コンストラクタ内でのみ使えること、this キーワードの使用前に呼び出さなくてはならないことに注意してください。

class Polygon {
  constructor(height, width) {
    this.name = 'Polygon';
    this.height = height;
    this.width = width;
  }
}

class Square extends Polygon {
  constructor(length) {
    super(length, length);
    this.name = 'Square';
  }
}

2 度クラス宣言を行う

class 宣言を使って再度クラスを宣言すると、型エラーをスローします。

class Foo {};
class Foo {}; // Uncaught TypeError: Identifier 'Foo' has already been declared

class 式を使って事前にクラスを定義していたときも、同じエラーをスローします。

var Foo = class {};
class Foo {}; // Uncaught TypeError: Identifier 'Foo' has already been declared

仕様

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

ブラウザ実装状況

Update compatibility data on GitHub
デスクトップモバイルサーバー
ChromeEdgeFirefoxInternet ExplorerOperaSafariAndroid webviewAndroid 版 ChromeEdge MobileAndroid 版 FirefoxAndroid 版 OperaiOSのSafariSamsung InternetNode.js
classChrome 完全対応 49
補足
完全対応 49
補足
補足 From Chrome 42 to 48 strict mode is required. Non-strict mode support can be enabled using the flag "Enable Experimental JavaScript".
Edge 完全対応 ありFirefox 完全対応 45IE 未対応 なしOpera 完全対応 36Safari 完全対応 10.1WebView Android 完全対応 49
補足
完全対応 49
補足
補足 From Chrome 42 to 48 strict mode is required. Non-strict mode support can be enabled using the flag "Enable Experimental JavaScript".
Chrome Android 完全対応 49
補足
完全対応 49
補足
補足 From Chrome 42 to 48 strict mode is required. Non-strict mode support can be enabled using the flag "Enable Experimental JavaScript".
Edge Mobile 完全対応 ありFirefox Android 完全対応 45Opera Android ? Safari iOS 完全対応 10.1Samsung Internet Android 完全対応 4.0nodejs 完全対応 6.0.0

凡例

完全対応  
完全対応
未対応  
未対応
実装状況不明  
実装状況不明
実装ノートを参照してください。
実装ノートを参照してください。

関連項目

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

このページの貢献者: mdnwebdocs-bot, woodmix, ambi, YuichiNukiyama, Marsf
最終更新者: mdnwebdocs-bot,