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
基本対応Chrome 完全対応 42Edge 完全対応 ありFirefox 完全対応 45IE 未対応 なしOpera ? Safari 完全対応 10.1WebView Android 完全対応 42Chrome Android 完全対応 42Edge Mobile 完全対応 ありFirefox Android 完全対応 45Opera Android ? Safari iOS 完全対応 10.1Samsung Internet Android 完全対応 4.0nodejs 完全対応 6.0.0
Array subclassingChrome 完全対応 43Edge ? Firefox ? IE 未対応 なしOpera ? Safari ? WebView Android 完全対応 43Chrome Android 完全対応 43Edge Mobile ? Firefox Android ? Opera Android ? Safari iOS ? Samsung Internet Android 完全対応 4.0nodejs ?
Allowed in sloppy modeChrome 完全対応 49Edge ? Firefox ? IE 未対応 なしOpera ? Safari ? WebView Android 完全対応 49Chrome Android 完全対応 49Edge Mobile ? Firefox Android ? Opera Android ? Safari iOS ? Samsung Internet Android 完全対応 5.0nodejs ?

凡例

完全対応  
完全対応
未対応  
未対応
実装状況不明  
実装状況不明

関連項目

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

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