Coffeescript-classes-and-inheritance
CoffeeScript-クラスと継承
JavaScriptは class キーワードを提供しません。 オブジェクトとそのプロトタイプを使用して、JavaScriptの継承を実現できます。 すべてのオブジェクトには独自のプロトタイプがあり、プロトタイプから関数とプロパティを継承します。 プロトタイプもオブジェクトなので、独自のプロトタイプもあります。
プロトタイプ継承は従来の継承よりもはるかに強力ですが、初心者ユーザーにとっては難しく、混乱を招きます。
CoffeeScriptのクラス
この問題に対処するために、CoffeeScriptはJavaScriptのプロトタイプを使用して構築される class と呼ばれる基本構造を提供します。 以下に示すようにclassキーワードを使用して、CoffeeScriptでクラスを定義できます。
例
次の例を考えてみましょう。ここでは、キーワード class を使用して Student という名前のクラスを作成しました。
上記のコードをコンパイルすると、次のJavaScriptが生成されます。
クラスのインスタンス化
次に示すように、他のオブジェクト指向プログラミング言語と同様に、new演算子を使用してクラスをインスタンス化できます。
以下に示すように、 new 演算子を使用して、上記で作成した(Student)クラスをインスタンス化できます。
上記のコードをコンパイルすると、次のJavaScriptが生成されます。
コンストラクターの定義
コンストラクターは、クラスをインスタンス化するときに呼び出される関数です。その主な目的は、インスタンス変数を初期化することです。 CoffeeScriptでは、次のように constructor という名前の関数を作成するだけで、コンストラクターを定義できます。
ここでは、コンストラクターを定義し、ローカル変数名をインスタンス変数に割り当てています。
コンストラクタの引数の前に @ を配置すると、インスタンス変数として自動的に設定されます。 したがって、上記のコードは、以下に示すように簡単に書くことができます-
例
CoffeeScriptのコンストラクターの例を次に示します。 constructor_example.coffee という名前のファイルに保存します
コードのコンパイル
コマンドプロンプトを開き、次のように上記の例をコンパイルします。
上記のコマンドを実行すると、次のJavaScriptが生成されます。
コードの実行
コマンドプロンプトで次のコマンドを実行して、上記の例を実行します。
実行すると、上記の例では次の出力が得られます。
インスタンスのプロパティ
オブジェクトと同じように、クラス内にプロパティを持つこともできます。 そして、これらは*インスタンスプロパティ*と呼ばれます。
例
次の例を考えてください。 ここでは、クラス内に変数(名前、年齢)と関数(message())を作成し、そのオブジェクトを使用してそれらにアクセスしました。 この例を instance_properties_example.coffee という名前のファイルに保存します
コンパイル時に、上記のコードは次の出力を生成します。
静的プロパティ
クラスで静的プロパティを定義できます。 静的プロパティの範囲はクラス内で制限されており、* thisキーワード*またはそのエイリアス @ シンボルを使用して静的関数を作成し、クラス名を_Class_Name.property_として使用してこれらのプロパティにアクセスする必要があります。
例
次の例では、messageという名前の静的関数を作成しました。 アクセスしました。 static_properties_example.coffee という名前のファイルに保存します。
コマンドプロンプトを開き、次のコマンドを使用して上記のCoffeeScriptファイルをコンパイルします。
コンパイル時に、次のJavaScriptが提供されます。
以下に示すように、コマンドプロンプトで上記のcoffeeScriptを実行します。
実行すると、上記の例では次の出力が得られます。
継承
CoffeeScriptでは、 extends キーワードを使用して、あるクラスのプロパティを別のクラスに継承できます。
例
以下は、CoffeeScriptでの継承の例です。 ここには、 Add と My_class という2つのクラスがあります。 クラスMy_classのAddという名前のクラスのプロパティを継承し、 extends キーワードを使用してそれらにアクセスしました。
CoffeeScriptは、舞台裏でプロトタイプ継承を使用します。 CoffeeScriptでは、インスタンスを作成するたびに、親クラスのコンストラクターがオーバーライドされるまで呼び出されます。
以下の例に示すように、* super()*キーワードを使用して、サブクラスから親クラスのコンストラクターを呼び出すことができます。
動的クラス
CoffeeScriptはプロトタイプ継承を使用して、クラスのすべてのインスタンスプロパティを自動的に継承します。 これにより、クラスが動的になります。子が作成された後に親クラスにプロパティを追加しても、継承されたすべての子にプロパティが伝播されます。
実行時に、上記のCoffeeScriptは次のJavaScriptコードを生成します。