JSでクラスを定義する方法はたくさんあります。
1。工場メソッド
コードコピーは次のとおりです。
function car(){
var ocar = new Object;
ocar.color = "blue";
ocar.doors = 4;
ocar.showcolor = function(){
document.write(this.color)
};
OCARを返します。
}
var car1 = car();
var car2 = car();
この関数が呼び出されると、新しいオブジェクトが作成され、すべてのプロパティとメソッドが割り当てられます。この関数を使用して、まったく同じプロパティを持つ2つのオブジェクトを作成します。もちろん、妹はパラメーターを渡すことでこの方法を変更できます。
コードコピーは次のとおりです。
ファンクションカー(色、ドア){
var ocar = new Object;
ocar.color = color;
ocar.doors = door;
ocar.showcolor = function(){
document.write(this.color)
};
OCARを返します。
}
var car1 = car( "red"、4);
var car2 = car( "Blue"、4);
car1.showcolor()// output: "red"
car2.showcolor()// output: "blue"
これで、異なるパラメーターを関数に渡すことにより、異なる値のオブジェクトを取得できます。
前の例では、function car()が呼び出されるたびに、showcolor()が作成されます。つまり、各オブジェクトには独自のshowcolor()メソッドがあります。
しかし、実際、各オブジェクトは同じ関数を共有しています。
メソッドは関数の外側で定義できますが、関数のプロパティをメソッドに向けることにより。
コードコピーは次のとおりです。
関数showcolor(){
アラート(this.color);
}
function car(){
var ocar = new object();
ocar.color = color;
ocar.doors = door;
ocar.showcolor = showcolor;
OCARを返します。
}
ただし、これは関数メソッドのようには見えません。
2。コンストラクターメソッド
コンストラクター法は、以下に示すように、工場メソッドと同じくらい簡単です。
コードコピーは次のとおりです。
ファンクションカー(色、ドア){
this.color = color;
this.doors = door;
this.showcolor = function(){
アラート(this.color)
};
}
var car1 = new car( "red"、4);
var car2 = new car( "Blue"、4);
コンストラクターメソッドは関数内にオブジェクトを作成しないことがわかり、これが使用されるキーワードがあります。コンストラクターを呼び出すときにオブジェクトが作成されており、これは関数内のオブジェクトプロパティにのみアクセスするためにのみ使用できます。
新しいものを使用してオブジェクトを作成します。それはそのように見えます!しかし、それは工場と同じです。各呼び出しは、オブジェクトの独自の方法を作成します。
3。プロトタイプメソッド
この方法では、オブジェクトのプロトタイプ属性を活用します。まず、空の関数でクラス名を作成し、次にすべての属性とメソッドがプロトタイプ属性に割り当てられます。
コードコピーは次のとおりです。
function car(){
}
car.prototype.color = "red";
car.prototype.doors = 4;
car.prototype.showcolor = function(){
アラート(this.color);
}
var car1 = new car();
var car2 = new car();
このコードでは、空の関数が最初に定義され、次にオブジェクトのプロパティがプロトタイプ属性を介して定義されます。この関数が呼び出されると、プロトタイプのすべてのプロパティがオブジェクトに割り当てられ、すぐに作成されます。この機能のすべてのオブジェクトは、showcolor()にポインターを保存します。これは、構文的に同じオブジェクトに属していると思われます。
ただし、この関数にはパラメーターがなく、パラメーターを渡すことで属性を初期化することはできません。オブジェクトが作成された後、属性のデフォルト値を変更する必要があります。
プロトタイプ法の非常に深刻な問題は、属性が配列などのオブジェクトを指すときです。
コードコピーは次のとおりです。
function car(){
}
car.prototype.color = "red";
car.prototype.doors = 4;
car.prototype.arr = new Array( "a"、 "b");
car.prototype.showcolor = function(){
アラート(this.color);
}
var car1 = new car();
var car2 = new car();
car1.arr.push( "cc");
アラート(car1.arr); //出力:AA、BB、CC
アラート(car2.arr); //出力:AA、BB、CC
ここでは、配列の基準値のため、両方のCARオブジェクトが同じ配列を指しているため、CAR1に値が追加されると、CAR2でも表示できます。
ユニオンは、コンストラクター/プロトタイプを使用して他のプログラミング言語のようなオブジェクトを作成できる方法です。これは、コンストラクターを使用してオブジェクトの非機能特性を定義し、プロトタイプを使用してオブジェクトを定義する方法です。
コードコピーは次のとおりです。
ファンクションカー(色、ドア){
this.color = color;
this.doors = door;
this.arr = new Array( "aa"、 "bb");
}
car.prototype.showcolor(){
アラート(this.color);
}
var car1 = new car( "red"、4);
var car2 = new car( "Blue"、4);
car1.arr.push( "cc");
アラート(car1.arr); //出力:AA、BB、CC
アラート(car2.arr); //出力:AA、BB
5。動的プロトタイプメソッド
動的プロトタイプ法は、混合コンストラクター/プロトタイプ法に似ています。唯一の違いは、オブジェクトの方法に与えられる位置です。
コードコピーは次のとおりです。
ファンクションカー(色、ドア){
this.color = color;
this.doors = door;
this.arr = new Array( "aa"、 "bb");
if(typeof car._initialized == "未定義"){
car.prototype.showcolor = function(){
アラート(this.color);
};
car._initialized = true;
}
}
動的プロトタイプ法は、フラグを使用して、プロトタイプにメソッドが割り当てられているかどうかを判断することです。これにより、メソッドが一度だけ作成されることが保証されます
6。混合工場法
その目的の教師は、別のオブジェクトの新しいインスタンスのみを返す偽のコンストラクターを作成します。
コードコピーは次のとおりです。
function car(){
var ocar = new object();
ocar.color = "red";
ocar.doors = 4;
ocar.showcolor = function(){
アラート(this.color)
};
OCARを返します。
}
ファクトリーメソッドとは異なり、この方法では新しい演算子を使用します。
上記はすべてオブジェクトを作成する方法です。最も広く使用されている方法は、ハイブリッドコンストラクター/プロトタイプ法であり、動的プロトタイプ法も非常に人気があります。コンストラクター/プロトタイプ法と機能的に同等です。
上記はこの記事のすべてです。あなたがそれを気に入ってくれることを願っています。