JavaScriptにオブジェクトを作成する方法はたくさんあります。
オブジェクトコンストラクター/オブジェクトリテラル:
デザインパターンを除いて、最も基本的な方法は、最初にオブジェクトコンストラクターを呼び出してオブジェクトを作成し、次にオブジェクトに属性を追加することです。
コードコピーは次のとおりです。
var Student = new object();
Student.name = "Xiao Ming";
Student.age = 20;
desute.getName = function(){
アラート(this.name);
}
文字通りのJavaScriptオブジェクトに精通している学生は、より良い執筆方法に変更できます。少なくともそれはより簡潔に見えます。
コードコピーは次のとおりです。
var Student = {
名前:「Xiao Hong」、
年齢:18、
getName:function(){
アラート(this.name);
}
};
短所:上記の方法の欠点の1つは、同じインターフェイスを使用して多くの類似オブジェクトを作成する場合、多数の重複コードが生成されることです。これは理解しやすいはずです。関数(メソッドまたはクラス)は、一般にパブリックメソッドを作成するために使用されます。上記のオブジェクト作成プロセスには、機能の影がまったくないため、再利用はありません。
工場モード:
工場パターンは、具体的なオブジェクトを作成するプロセスを抽象化します。ブラックボックスのように、関数(工場に入る)を呼び出し、対応するパラメーター(さまざまな原材料)を渡すだけで、対応するオブジェクト(工場で生成される製品)が出てきます。工場のパターンは、複数の類似のオブジェクトを作成する問題を解決します。
コードコピーは次のとおりです。
function StudentFactory(name、age){
var Student = new object();
Student.name = name;
Student.age = age;
Student.sayname = function(){
アラート(this.name);
}
学生を返します。
}
var p1 = sustentFactory( "ming"、20);
var p2 = sustentFactory( "Hong"、18);
欠点:工場のパターンには欠点もあり、最大の欠点はオブジェクトタイプの認識の問題です。オブジェクトがオブジェクトタイプ(P1インスタンスオブオブジェクト)であることのみを決定できますが、どのタイプであるかを判断することは不可能です。 Factoryモードを使用して作成された学生は、実際には同様のプロパティと方法を持っていますが、値は異なります。この時点でのより良い解決策は、すべてのオブジェクトが学生タイプに属するように、学生機能を作成することです。そのため、工場モードは悪くありませんが、コンストラクターモードの方が優れています。
カスタムタイプコンストラクター:
コンストラクターを使用して、特定のタイプのオブジェクトを作成できます。
コードコピーは次のとおりです。
関数学生(名前、年齢){
this.name = name;
this.age = age;
this.sayname = function(){
アラート(this.name);
}
}
var p3 = new Student( "Ming"、20);
var p4 = new Student( "Hong"、18);
アラート(P3 Instanceof Student);
アラート(p3.sayname == p4.sayname); //間違い
欠点:カスタムコンストラクターの欠点は、各オブジェクトが独自の方法を再現することです。実際、これらの方法は同じ関数(SayNameなど)ですが、同じではありません(P3.SayNameとP4.SayNameは等しくありません)。
プロトタイプモード:
空の関数を定義し、すべてのプロパティとメソッドをプロトタイプに追加して、すべてのオブジェクトがこれらのプロパティとメソッドを共有できるようにします。
コードコピーは次のとおりです。
function student(){};
Student.prototype.name = "ming";
Student.prototype.age = 20;
Student.prototype.friends = ['qi'];
Student.prototype.sayname = function(){
アラート(this.name);
};
短所:一部の属性を共有できず、それらを共有すると、次のような問題が発生します。各学生の友人のほとんどは同じではありません。
コンストラクターとプロトタイプの組み合わせ:
コードコピーは次のとおりです。
関数学生(名前、年齢、友達){
this.name = name;
this.age = age;
this.friends = friends;
}
Student.prototype = {
コンストラクター:学生、
sayname:function(){
アラート(this.name);
}
};
概要:コンストラクターとプロトタイプの組み合わせは、カスタムタイプを作成する広く認識されている方法です。また、上記の方法の中でも最良の方法です。
/***************************************************************************************/
実際、上記のオブジェクトを作成する方法はすでに多くありますが、継続的な最適化を必要とする特別なシナリオがまだいくつかあります。
動的プロトタイプモード:
コンストラクターとプロトタイプの組み合わせの最適化です。これらの一般的な属性と方法については、初期化された場合、効率を改善するために初期化を繰り返す必要はありません。
コードコピーは次のとおりです。
関数学生(名前、年齢){
this.name = name;
this.age = age;
if((typeof this.sayname)!= "function"){
Student.prototype.sayname = function(){
アラート(this.name);
}
}
}
var stu = new person( "ming"、20);
// alert(Stu Instanceof Student);
stu.sayname();
var Stunew = new Person( "Hong"、18);
// alert(Stunew Instanceof Student);
stunew.sayname();
複数の学生オブジェクトが作成されると、SayNameメソッドは1回だけ初期化されます。
最後に、機能を安全に構築することであるオブジェクトを作成する別の非常に便利な方法があります。
安定したコンストラクターパターン:
このモードでは、これと新しいものは禁止されており、すべてのオブジェクトにはパブリック属性がありません。変数の値のみが読み取られますが、変更されていません。
コードコピーは次のとおりです。
//// Stafe Constructorモード
関数学生(名前、年齢){
var o = new object();
o.sayname = function(){
アラート(名前);
}
oを返します。
}
var stu = dustent( "ming"、21);
stu.sayname();
上記は、非常に包括的なカスタムオブジェクトを作成するためのいくつかの一般的なJavaScriptメソッドをまとめたものです。より良いものがある場合は、私に連絡してください。この記事は引き続き更新されます。