関数とクラスの違いは何だろうと思っています。どちらもキーワード関数を使用していますが、これら 2 つの間に明らかな違いはありますか?
7 に答える
技術的にはクラスはありません。どちらも単なる関数です。任意の関数は、キーワードを使用してコンストラクターとして呼び出すことができnew
、その関数のプロトタイプ プロパティは、オブジェクトがメソッドを継承するために使用されます。
「クラス」は、上記のプラクティスを説明するために概念的にのみ使用されます。
したがって、誰かが「色のクラスを作成してください」などと言った場合、次のようにします。
function Color(r, g, b) {
this.r = r;
this.g = g;
this.b = b;
}
Color.prototype.method1 = function() {
};
Color.prototype.method2 = function() {
};
分解すると、関数とprototype
、その関数の呼び出されるプロパティへのいくつかの割り当てがあり、すべて一般的な JavaScript 構文であり、特別なことは何も行われていません。
あなたが言うとき、それはすべて少し魔法になりますvar black = new Color(0,0,0)
。.r
次に、プロパティ、.g
およびを持つオブジェクトを取得します.b
。そのオブジェクトには、 への非表示の [[prototype]] リンクもありColor.prototype
ます。つまり、オブジェクトに存在しなくblack.method1()
ても言うことができます。.method1()
black
JavaScript にはクラスがありません。javascript は、クラスベースの継承ではなく、プロトタイプの継承を使用します。JavaScript のクラスの方が理解しやすいので、多くの人がクラスを参照しますが、これは純粋に類推です。
クラスベースの継承では、クラス (必要に応じて「ブループリント」) を作成し、そのクラスからオブジェクトをインスタンス化します。
プロトタイプの継承では、オブジェクトは別の親オブジェクトから直接インスタンス化され、「設計図」は必要ありません。
クラスとプロトタイプの継承の詳細については、ウィキペディアのページを参照してください。
この講演では、関数とクラスの重要な違いの 1 つが強調され、関数はデータを運ぶことができる動作であり、逆に、クラスは動作を運ぶことができるデータであることを示唆しています。
クラスという用語は通常、オブジェクト指向プログラミング言語のコンテキストで使用されます。クラスは、インスタンス化時に作成されるオブジェクトのテンプレートです。JavaScriptはプロトタイプベースのプログラミング言語であるため、クラスという用語を使用してJavaScriptプロトタイプを説明するのは少し奇妙です。JavaScriptでは、プロトタイプは関数として作成されます