JavaScriptクラスは、オブジェクトを作成するためのブループリントです。 クラスは、データとデータを操作する関数をカプセル化します。
JavaやC++などの他のプログラミング言語とは異なり、JavaScriptクラスはプロトタイプの継承に対する構文的な砂糖です。 言い換えれば、ES6クラスは単なる特殊関数です。
ES6より前のクラス再訪
ES6より前のクラスでは、JavaScriptにはクラスの概念がありませんでした。, クラスを模倣するために、次の例に示すようにコンストラクタ関数を使用することがよくあります。
Output:
仕組み。
まず、Person
というプロパティ名を持つコンストラクタ関数としてname
を作成します。 getName()
関数はprototype
に割り当てられているため、Person
タイプのすべてのインスタンスで共有できます。次に、Person
演算子を使用して、new
タイプの新しいインスタンスを作成します。, したがって、john
オブジェクトは、プロトタイプ継承によるPerson
およびObject
のインスタンスです。,
次のステートメントでは、instanceof
演算子を使用して、john
がPerson
およびObject
タイプのインスタンスであるかどうかを確認します。
Code language: JavaScript (javascript)
ES6クラス宣言
Es6では、次の例に示すようにクラスを宣言するための新しい構文が導入されました。
Code language: JavaScript (javascript)
このPerson
クラスは、前の例のPerson
タイプのように動作します。 ただし、コンストラクタ関数を使用する代わりに、class
キーワードを使用します。,
Person
クラスのconstructor()
は、インスタンスのプロパティを初期化できる場所です。 JavaScriptは、クラスのオブジェクトをインスタンス化するときに、constructor()
メソッドを自動的に呼び出します。
以下は、新しいPerson
オブジェクトを作成し、自動的にconstructor()
Person
クラスの
を呼び出します。
Code language: JavaScript (javascript)
getName()
は、getName()
のメソッドと呼ばれます。Person
クラス。, コンストラクタ関数と同様に、次の構文を使用してクラスのメソッドを呼び出すことができます。
Code language: CSS (css)
例えば、
Code language: JavaScript (javascript)
クラスが特殊関数であることを確認するには、typeof
演算子を使用してPerson
クラス。
Code language: JavaScript (javascript)
期待どおりにfunction
を返します。,
john
オブジェクトは、Person
およびObject
タイプのインスタンスでもあります。
Code language: JavaScript (javascript)
クラス対カスタムタイプ
クラスとコンストラクタ関数で定義されたカスタムタイプの間の類似点にもかかわらず、クラスとコンストラクタ関数を介して定義されたカスタムタイプとの間に類似点がありますが、コンストラクタ関数を介して定義されたカスタムタイプとの間に類似点があります。いくつかの重要な違いがあります。
まず、クラス宣言は関数宣言のようにホイストされません。
たとえば、Person
クラス宣言セクションの上に次のコードを配置すると、ReferenceError
が表示されます。,
Code language: JavaScript (javascript)
エラー:
Code language: JavaScript (javascript)
次に、クラス内のすべてのコードがstrictモードで自動的に実行されます。 この動作を変更することはできません。
第三に、クラスメソッドは列挙可能ではありません。 コンストラクター関数を使用する場合は、Object.defineProperty()
メソッドを使用してプロパティを列挙不可能にする必要があります。
第四に、new
演算子なしでクラスコンストラクタを呼び出すと、次の例に示すようにエラーが発生します。,
Code language: JavaScript (javascript)
エラー:
Code language: JavaScript (javascript)
概要
- JavaScriptを使用します
class
キーワードは新しいクラスを宣言します。 - A
class
宣言は、追加の拡張機能を備えたプロトタイプ継承に対する構文上の砂糖です。
- このチュートリアルは役に立ちましたか?
- イェスノ
Leave a Reply