From 33058f2b292b3a581333bdfb21b8f671898c5060 Mon Sep 17 00:00:00 2001 From: Peter Bengtsson Date: Tue, 8 Dec 2020 14:40:17 -0500 Subject: initial commit --- .../reference/statements/class/index.html | 102 +++++++++++++++++++++ 1 file changed, 102 insertions(+) create mode 100644 files/ja/web/javascript/reference/statements/class/index.html (limited to 'files/ja/web/javascript/reference/statements/class/index.html') diff --git a/files/ja/web/javascript/reference/statements/class/index.html b/files/ja/web/javascript/reference/statements/class/index.html new file mode 100644 index 0000000000..fb92abda81 --- /dev/null +++ b/files/ja/web/javascript/reference/statements/class/index.html @@ -0,0 +1,102 @@ +--- +title: class +slug: Web/JavaScript/Reference/Statements/class +tags: + - Classes + - Declaration + - ECMAScript6 + - JavaScript + - Reference + - クラス + - 宣言 +translation_of: Web/JavaScript/Reference/Statements/class +--- +
{{jsSidebar("Statements")}}
+ +

クラス宣言は、プロトタイプベースの継承を使って、指定された名前の新しいクラスを作成します。

+ +
{{EmbedInteractiveExample("pages/js/statement-class.html")}}
+ + + +
+

{{jsxref("Operators/class", "クラス式", "", 1)}}を使ってクラスを定義することもできます。しかし、クラス式と異なり、クラス宣言は既存のクラスを再宣言することができず、再宣言しようとすると {{jsxref("SyntaxError")}} が発生します。

+
+ +

構文

+ +
class name [extends otherName] {
+  // クラス本体
+}
+ +

解説

+ +

クラス式と同様、クラス宣言の内部は厳格モードで実行されます。 constructor メソッドは省略可能です。

+ +

クラス宣言は{{Glossary("Hoisting", "巻き上げ")}}が行われません (関数宣言とは異なります)。

+ +

+ +

単純なクラス宣言

+ +

次の例では、はじめに 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';
+  }
+}
+ +

クラスを二度宣言する

+ +

クラス宣言を使って再度クラスを宣言すると、 {{jsxref("SyntaxError")}} が発生します。

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

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

+ +
let Foo = class {};
+class Foo {}; // Uncaught SyntaxError: Identifier 'Foo' has already been declared
+
+ +

仕様書

+ + + + + + + + + + + + +
仕様書
{{SpecName('ESDraft', '#sec-class-definitions', 'Class definitions')}}
+ +

ブラウザーの互換性

+ + + +

{{Compat("javascript.statements.class")}}

+ +

関連情報

+ + -- cgit v1.2.3-54-g00ecf