オブジェクト指向について考えるとき、クラス、オブジェクト、カプセル化、継承、ポリモーフィズムを考えることができます。 『JavaScript Advanced Programming』(人民郵政出版社、曹立・張新訳、英語名:Professional JavaScript for Web Developers)という書籍に比較的詳しく記載されています。 JavaScript でクラスを定義するさまざまな方法を見てみましょう。
1.ファクトリーメソッド
JavaScript で独自のクラスとオブジェクトを作成する方法をマスターする必要があります。次のコードのように、JavaScript でオブジェクトのプロパティをオブジェクトの作成後に動的に定義できることは誰もが知っています。
new キーワードの使用は人々の心に深く根付いているため、上記のメソッドを使用して定義すると常にぎこちなく感じられ、呼び出されるたびに新しいプロパティや関数が作成されるため、機能的に実用的ではありません。コンストラクター クラスの正式な定義を見てみましょう。
2.コンストラクター
このメソッドはファクトリー関数に少し似ています。具体的なパフォーマンスは次のとおりです。
3.プロトタイプメソッド
オブジェクトのプロトタイプ属性を使用すると、新しいオブジェクトの作成に依存するプロトタイプを確認できます。方法は次のとおりです。
//json を使用してプロトタイプの定義を簡素化できます:
Car.prototype =
{
カラー: "赤"、
ドア: 4、
ドライバー: ["トム"、"ジェリー"、'safdad']、
showColor : function() {
alert(this.color); 次に、プロパティを追加して、オブジェクトのプロトタイプ プロパティを通じて Car オブジェクトのプロパティを定義します。この方法は優れていますが、問題は、Car オブジェクトが Array ポインターを指していることです。一方のオブジェクト car1 が属性オブジェクト (配列 Array) の参照を変更すると、もう一方のオブジェクト car2 も同じ Array 配列を指していることです。属性オブジェクト (配列 Array) の参照を変更することはできません。
同時に、この問題は、プロトタイプが初期化パラメーターを受け取ることができないため、コンストラクターが正常に初期化できないという事実にも現れています。これには、別の解決方法、つまりハイブリッド コンストラクター/プロトタイプ パターンが必要です。
コンストラクターとプロトタイプを一緒に使用すると、クラスを定義するのに非常に便利です。
コードをコピー
このメソッドは実際には非常に使いやすいはずですが、Java の構文と比較すると、少し不調和で乱雑なはずです。C の場合、それほど面倒とは感じませんが、C の開発担当者が JavaScript を使用することは一般にほとんどありません。 J2EE 研究開発担当者の皆さん、このアプローチはいつも少しぎこちないものです。実際には、視覚的なカプセル化の効果を達成してこの方法の効果を達成したい場合、それは単にパッケージの視覚効果があまり良くないだけだと個人的には思います。それはもっと面倒です。それがダイナミックプロトタイピング手法です。
5. 動的プロトタイプ
他の言語の使用に慣れている開発者にとって、コンストラクターとプロトタイプを混合したアプローチを使用すると、調和がとれないように感じるかもしれません。結局のところ、ほとんどのオブジェクト指向言語は、クラスを定義するときにプロパティとメソッドを視覚的にカプセル化します。次の C# クラスについて考えてみましょう:
public Car(string color, int door, int mpg) //constructor
{
this.color = color;
this.doors = door;
this.mpg = mpg;
}
public void showColor() //method
{
Console.WriteLine(this.color);
}
}
動的プロトタイプ メソッドの基本的な考え方は、ハイブリッド コンストラクター/プロトタイプ アプローチと同じです。つまり、非機能プロパティはコンストラクター内で定義され、機能プロパティはプロトタイプ プロパティを使用して定義されます。唯一の違いは、オブジェクト メソッドが割り当てられる場所です。以下は、動的プロトタイプ メソッドで書き直された Car クラスです:
6 工場での混合方法
この方法は通常、前の方法を適用できない場合の回避策です。その目的は、別の種類のオブジェクトの新しいインスタンスを返すだけの偽のコンストラクターを作成することです。このコードはファクトリー関数とよく似ています:
コードをコピー
コードは次のとおりです:
Car.showColor();