JS でクラスを定義するにはさまざまな方法があります:
1. ファクトリーメソッド
function Car(){
var ocar = 新しいオブジェクト
ocar.color = "青";
ocar.doors = 4;
ocar.showColor = function(){
Document.write(this.color)
};
オカルを返します
}
var car1 = 車();
var car2 = 車();
この関数が呼び出されると、新しいオブジェクトが作成され、すべてのプロパティとメソッドがそれに割り当てられます。この関数を使用して、まったく同じプロパティを持つ 2 つのオブジェクトを作成します。もちろん、妹はパラメータを渡すことでこのメソッドを変更できます。
コードをコピーします
ocar.color = 色;
ocar.doors = ドア
ocar.showColor = function(){
Document.write(this.color)
};
オカルを返します
}
var car1 = 車("赤",4);
var car2 = Car("青",4);
car1.showColor() //出力:"赤"
car2.showColor() //出力:"青"
関数に異なるパラメータを渡すことで、異なる値を持つオブジェクトを取得できるようになりました。
前の例では、関数 Car() が呼び出されるたびに showcolor() が作成されます。これは、各オブジェクトが独自の showcolor() メソッドを持つことを意味します。
しかし実際には、各オブジェクトは同じ機能を共有します。
ただし、関数の外でメソッドを定義し、関数のプロパティをそのメソッドにポイントすることは可能です。
コードをコピーします
コードは次のとおりです:
ocar.showColor = showColor
オカルを返します
}
しかし、これは関数メソッドのようには見えません。
2. コンストラクターメソッド
以下に示すように、コンストラクター メソッドはファクトリ メソッドと同じくらい単純です。
コードをコピーします
コードは次のとおりです:
var car1 = 新しい車("赤",4);
var car2 = 新しい車("青",4);
コンストラクター メソッドは関数内にオブジェクトを作成せず、this キーワードを使用していることがわかります。コンストラクターが呼び出されたときにオブジェクトが作成されており、関数内でオブジェクトのプロパティにアクセスするにはこれのみを使用できるためです。
new を使用してオブジェクトを作成すると、次のようになります。しかし、それは工場でのアプローチと同じです。各呼び出しでは、オブジェクトに独自のメソッドが作成されます。
3. プロトタイプメソッド
このメソッドはオブジェクトのプロトタイプ属性を使用します。まず、空の関数を使用してクラス名が作成され、次にすべてのプロパティとメソッドにプロトタイプ属性が割り当てられます。
コードをコピーします
コードは次のとおりです:
function Car(){
}
Car.prototype.color = "赤";
Car.prototype.doors = 4;
Car.prototype.showColor = function(){
アラート(this.color);
}
var car1 = 新しい車()
var car2 = 新しい車()
このコードでは、最初に空の関数が定義され、次にオブジェクトのプロパティがプロトタイプ属性を通じて定義されます。この関数が呼び出されると、プロトタイプのすべてのプロパティが作成されるオブジェクトに即座に割り当てられ、この関数のすべてのオブジェクトは showColor() へのポインターを格納し、構文的にはすべて同じオブジェクトに属しているように見えます。
ただし、この関数にはパラメータがないため、パラメータを渡してプロパティを初期化することはできません。オブジェクトの作成後にプロパティのデフォルト値を変更する必要があります。
プロトタイプ メソッドの重大な問題は、プロパティが配列などのオブジェクトを指している場合です。
function Car(){
}
Car.prototype.color = "赤";
Car.prototype.doors = 4;
Car.prototype.arr = new Array("a","b");
Car.prototype.showColor = function(){
アラート(this.color);
}
var car1 = 新しい車()
var car2 = 新しい車()
car1.arr.push("cc");
アラート(car1.arr); //出力:aa,bb,cc
アラート(car2.arr); //出力:aa,bb,cc
配列の参照値により、Car の 2 つのオブジェクトは同じ配列を指すため、その値を car1 に追加すると、car2 にもその値が表示されます。
Union は、他のプログラミング言語と同様に、コンストラクター/プロトタイプ メソッドを使用してオブジェクトを作成するメソッドです。コンストラクターを使用してオブジェクトの非機能属性を定義し、プロトタイプ メソッドを使用してオブジェクトを定義します。
コードをコピーします
コードは次のとおりです:
関数 車(色,ドア){
This.color = 色
This.doors = ドア
This.arr = new Array("aa","bb");
}
Car.prototype.showColor(){
アラート(this.color);
}
var car1 = 新しい車("赤",4);
var car2 = 新しい車("青",4);
car1.arr.push("cc");
アラート(car1.arr); //出力:aa,bb,cc
アラート(car2.arr); //出力:aa,bb
5. 動的プロトタイプメソッド
動的プロトタイプ メソッドの原理は、混合コンストラクター/プロトタイプ メソッドの原理と似ています。唯一の違いは、オブジェクト メソッドが割り当てられる場所です。
コードをコピーします
コードは次のとおりです:
関数 車(色,ドア){
動的プロトタイプ メソッドは、フラグを使用して、メソッドがプロトタイプに割り当てられているかどうかを判断します。これにより、メソッドが 1 回だけ作成されることが保証されます
6. 工場での混合方法
その目的は、別のオブジェクトの新しいインスタンスを返すだけの偽のコンストラクターを作成することです。
コードをコピーします
コードは次のとおりです:
function Car(){
var ocar = 新しいオブジェクト
;
ocar.color = "赤";
ocar.doors = 4;
ocar.showColor = function(){
アラート(this.color)
};
オカルを返します
}
ファクトリメソッドとの違いは、このメソッドが new 演算子を使用することです。
上記はオブジェクトを作成するすべてのメソッドです。現在最も広く使用されている方法は、コンストラクターとプロトタイプの混合方法です。また、動的プロトタイプ方法も非常に人気があります。機能的にはコンストラクター/プロトタイプのアプローチと同等です。
以上がこの記事の全内容です。皆さんに気に入っていただければ幸いです。