Please note, this is a STATIC archive of website developer.mozilla.org from November 2016, cach3.com does not collect or store any user information, there is no "phishing" involved.

class 式

class 式は、ECMAScript 2015(ES6)でクラスを定義する方法の 1 つです。function 式と同じように、class 式は名前を付けることも付けないこともできます。名前を付けた場合、クラス名はクラス本体のみローカルです。 JavaScript のクラスはプロトタイプベース継承が使われます。

構文

var MyClass = class [className] [extends] {
  // class body
};

説明

class 式は、class 文と同じような構文を持っています。しかし、class 式ではクラス名(結合識別子; "binding identifier")を省略できますが、class 文では省略できません。また、class 式は、class の再定義/再宣言が可能で、class 文 のような何らかのエラーをスローしません。コンストラクタプロパティはオプションです。そして、このキーワードを使用して生成された class の typeof は常に "functions" になります。

class 文のように、class 式の class 本体は strict mode で実行されます。

'use strict';
var Foo = class {}; // constructor property is optional
var Foo = class {}; // Re-declaration is allowed

typeof Foo; //returns "function"
typeof class {}; //returns "function"

Foo instanceof Object; // true
Foo instanceof Function; // true
class Foo {}; // Throws TypeError, doesn't allow re-declaration

簡単な class 式

これは、簡単な匿名 class 式です。変数 "Foo" を使用して参照できます。

var Foo = class {
  constructor() {}
  bar() {
    return "Hello World!";
  }
};

var instance = new Foo();
instance.bar(); // "Hello World!"
Foo.name; // ""

名前付き class 式

class 本体内で現在の class を参照したい場合は、名前付き class 式を作成してください。この名前は、class 式自身のスコープ内でのみ見えます。

var Foo = class NamedFoo {
  constructor() {}
  whoIsThere() {
    return NamedFoo.name;
  }
}
var bar = new Foo();
bar.whoIsThere(); // "NamedFoo"
NamedFoo.name; // ReferenceError: NamedFoo is not defined
Foo.name; // "NamedFoo"

仕様

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

ブラウザ実装状況

機能 Chrome Firefox (Gecko) Internet Explorer Opera Safari
基本サポート 42.0 45 (45) ? ? ?
機能 Android Android Webview Firefox Mobile (Gecko) IE Mobile Opera Mobile Safari Mobile Chrome for Android
基本サポート 未サポート 42.0 45.0 (45) ? ? ? 42.0

関連項目

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

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