検索
ホームページウェブフロントエンドjsチュートリアルJavaScript ファクトリ パターン、プロトタイプ パターン、コンストラクタ パターン

1. パターンとは何ですか? パターンは再利用可能な解決策ですが、アンチパターンは特定の問題に対する不適切な解決策です。

js アンチパターンの一般的な例

① 関数の代わりに文字列を setTimeout と setInterval に渡すと、eval() の内部使用がトリガーされます。
②グローバルコンテキストで大量の変数を定義するとグローバル名前空間が汚染される
③オブジェクトクラスのプロトタイプを変更する
④インライン形式でjsを使用すると、HTMLファイルに埋め込まれたjsコードを外部の単体テストツールに含めることができません。

⑤document.write を悪用します。ページが読み込まれた後に document.write が実行されると、現在のページが書き換えられます。代わりに document.creatElement を使用できる場合は、document.write を使用しないようにしてください。

2. デザインパターンの分類

(1).ファクトリパターン(単純なものと複雑なもの)

簡単に言うと、カプセル化されたコードです。その役割については、オブジェクトを使用することが分かりやすいです。いくつかのオブジェクトをカプセル化し、多くのスペースを占めるいくつかの反復コードをカプセル化するための指向性メソッド。実装方法は非常に簡単で、関数内でオブジェクトを作成し、そのオブジェクトにプロパティやメソッドを代入し、そのオブジェクトを返すだけです。この方法 は、インスタンス化されたオブジェクトの多数の重複の問題 を解決するためのものです。

	function creatper(name,age){  
		var per=new Object(); //原料
		//加工
		per.name=name;
		per.age=age;  
		per.sayHi=function(){
		  	console.log(per.name+'已经有'+per.age+"岁");  
		}
		return per; //出厂
	}
	var test1=creatper('lili',22);
	var test2 =creatper('mike',25);//第二个实例
	test1.sayHi();
	test2.sayHi();
	console.log(test1.name);

ファクトリモードを使用すると、この関数ごとに繰り返し呼び出して、さまざまな属性値を持つオブジェクトを生成できることがわかります。これはまさに工場のように、大量生産され、原材料、加工、配送がすべて非常に明確です。 。ただし、日付や配列などとは異なり、オブジェクトはすべてオブジェクトであるため、ファクトリ パターンではオブジェクトの種類を識別できないことがわかります。

ファクトリーパターンをいつ使用するか?
ファクトリ パターンは主に次のシナリオで使用されます:
① オブジェクトまたはコンポーネントに高度な複雑性が含まれる場合
② 異なる環境に応じてオブジェクトの異なるインスタンスを簡単に生成する必要がある場合

③ 共有する多数の小さなオブジェクトを扱う場合同じプロパティまたはコンポーネント時間

(2)。Constructor (コンストラクター) パターン

Constructor (コンストラクター メソッド) を ECMAScript で使用して、特定のオブジェクトを作成できます。 このモードは、上記のファクトリ モードがオブジェクト インスタンスを識別できないという問題を解決できます。

	function Student(name,age,classa){//构造函数模式
        this.name = name;
        this.age = age;
        this.classa = classa;
        this.run = function () {
            console.log(this.name+ this.age+ "岁上"+this.classa +"!");
        }
    }
    var Benz = new Student('Lili',22,'初三');
    var BMW = new Student("Mike",25,"初一");
    console.log(Benz instanceof Student); //很清晰的识别他从属于Student
    Benz.run();
    BMW.run();

このコードからは、ファクトリー モードでの異なる関数名を除いて、a. コンストラクター メソッドが明示的にオブジェクト (new Object()) を作成しないこと、b. プロパティとメソッドを直接割り当てることがわかります。このオブジェクトには return ステートメントがありません。オブジェクトを認識する能力 (これは、コンストラクター パターンがファクトリー パターンよりも優れている点です) 。注: コンストラクター メソッドの仕様: 1. 関数名とインスタンス化コンストラクター名は同じで大文字です。 2. コンストラクターを通じてオブジェクトを作成するには、new 演算子を使用する必要があります。

オブジェクトはコンストラクターを通じて作成できるので、このオブジェクトはどこから来て、どこで new Object() が実行されるのでしょうか?実行プロセスは次のとおりです。
1. コンストラクターが使用され、 newconstructor() がバックグラウンドで実行されます。
2. コンストラクターのスコープを新しいオブジェクトに与えます。 Object() 作成されたオブジェクト)、関数本体の this は new Object() によって作成されたオブジェクトを表します。
3. コンストラクターでコードを実行します。

4. 新しいオブジェクトを返します (バックグラウンドで直接返します)。

(3). プロトタイプ パターン

js は、作成されたすべての関数がプロトタイプ属性を持つことを規定しており、この属性はオブジェクトを指すポインターであり、このオブジェクトの目的は特定の型のすべてのインスタンスによって共有されることです。プロパティとメソッドは、プロトタイプ オブジェクトを使用して、すべてのインスタンス オブジェクトにこれらのプロパティとメソッドを含めることができます。

	function Per(){}
	Per.prototype.name='小米';
	Per.prototype.age=22;
	Per.prototype.course=['php','javascript','java','C#'];
	Per.prototype.say=function(){
		console.log(this.name+"有"+this.age+"岁,学习了"+this.course+"等课程。");
	}
	var per1=new Per();
	var per2=new Per();
	per1.name='小林';
	per1.course.push('Html5');
	per1.say();
	per2.say();
	per2.course.pop();

プロトタイプパターンの欠点については、初期化パラメータを渡すコンストラクターを省略していることも明らかだと思いますが、デフォルトではすべてのインスタンスが同じ属性値を取得します。後で変更することはできますが、これは最大の問題ではありません。共有の性質により、一方のインスタンスが参照を変更し、もう一方のインスタンスも変更されます。属性を変更します。したがって、プロトタイプ モードは通常、単独で使用されません。

(4). プロトタイプを持つコンストラクター = プロトタイプ パターン + コンストラクター パターン

	function Per(name,age,course){
		this.name=name;
		this.age=age;
		this.course=course;
	}
	Per.prototype.say=function(){
		console.log(this.name+"有"+this.age+"岁,学习了"+this.course+"等课程。");
	}
	var per1=new Per('Make',22,['C#','java','PHP','Javascript']);
	var per2=new Per('小高',21,['oracle','mysql','nodejs','html5']);
	per1.say();//Make有22岁,学习了C#,java,PHP,Javascript等课程。
	per2.say();//小高有21岁,学习了oracle,mysql,nodejs,html5等课程。
	per1.course.pop();
	per1.say();//Make有22岁,学习了C#,java,PHP等课程。
	per2.say();//小高有21岁,学习了oracle,mysql,nodejs,html5等课程。

上記の分析: コンストラクターはインスタンスの属性を定義するために使用され、プロトタイプ パターンはメソッドと一部の共有属性を定義するために使用されます。各インスタンスは独自の属性を持ちますが、同時にメソッドを共有し、メモリを最大限に節約します。さらに、このモードは初期パラメータの受け渡しもサポートしています。最も広く使用されています。

関連する推奨事項:

JSデザインパターンのプロトタイプモードの詳細説明

JSデザインパターンのコマンドパターンの詳細説明

JSデザインパターンのプロキシモードの詳細説明

以上がJavaScript ファクトリ パターン、プロトタイプ パターン、コンストラクタ パターンの詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

声明
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。
Python vs. JavaScript:コミュニティ、ライブラリ、リソースPython vs. JavaScript:コミュニティ、ライブラリ、リソースApr 15, 2025 am 12:16 AM

PythonとJavaScriptには、コミュニティ、ライブラリ、リソースの観点から、独自の利点と短所があります。 1)Pythonコミュニティはフレンドリーで初心者に適していますが、フロントエンドの開発リソースはJavaScriptほど豊富ではありません。 2)Pythonはデータサイエンスおよび機械学習ライブラリで強力ですが、JavaScriptはフロントエンド開発ライブラリとフレームワークで優れています。 3)どちらも豊富な学習リソースを持っていますが、Pythonは公式文書から始めるのに適していますが、JavaScriptはMDNWebDocsにより優れています。選択は、プロジェクトのニーズと個人的な関心に基づいている必要があります。

C/CからJavaScriptへ:すべてがどのように機能するかC/CからJavaScriptへ:すべてがどのように機能するかApr 14, 2025 am 12:05 AM

C/CからJavaScriptへのシフトには、動的なタイピング、ゴミ収集、非同期プログラミングへの適応が必要です。 1)C/Cは、手動メモリ管理を必要とする静的に型付けられた言語であり、JavaScriptは動的に型付けされ、ごみ収集が自動的に処理されます。 2)C/Cはマシンコードにコンパイルする必要がありますが、JavaScriptは解釈言語です。 3)JavaScriptは、閉鎖、プロトタイプチェーン、約束などの概念を導入します。これにより、柔軟性と非同期プログラミング機能が向上します。

JavaScriptエンジン:実装の比較JavaScriptエンジン:実装の比較Apr 13, 2025 am 12:05 AM

さまざまなJavaScriptエンジンは、各エンジンの実装原則と最適化戦略が異なるため、JavaScriptコードを解析および実行するときに異なる効果をもたらします。 1。語彙分析:ソースコードを語彙ユニットに変換します。 2。文法分析:抽象的な構文ツリーを生成します。 3。最適化とコンパイル:JITコンパイラを介してマシンコードを生成します。 4。実行:マシンコードを実行します。 V8エンジンはインスタントコンピレーションと非表示クラスを通じて最適化され、Spidermonkeyはタイプ推論システムを使用して、同じコードで異なるパフォーマンスパフォーマンスをもたらします。

ブラウザを超えて:現実世界のJavaScriptブラウザを超えて:現実世界のJavaScriptApr 12, 2025 am 12:06 AM

現実世界におけるJavaScriptのアプリケーションには、サーバー側のプログラミング、モバイルアプリケーション開発、モノのインターネット制御が含まれます。 2。モバイルアプリケーションの開発は、ReactNativeを通じて実行され、クロスプラットフォームの展開をサポートします。 3.ハードウェアの相互作用に適したJohnny-Fiveライブラリを介したIoTデバイス制御に使用されます。

next.jsを使用してマルチテナントSaaSアプリケーションを構築する(バックエンド統合)next.jsを使用してマルチテナントSaaSアプリケーションを構築する(バックエンド統合)Apr 11, 2025 am 08:23 AM

私はあなたの日常的な技術ツールを使用して機能的なマルチテナントSaaSアプリケーション(EDTECHアプリ)を作成しましたが、あなたは同じことをすることができます。 まず、マルチテナントSaaSアプリケーションとは何ですか? マルチテナントSaaSアプリケーションを使用すると、Singの複数の顧客にサービスを提供できます

next.jsを使用してマルチテナントSaaSアプリケーションを構築する方法(フロントエンド統合)next.jsを使用してマルチテナントSaaSアプリケーションを構築する方法(フロントエンド統合)Apr 11, 2025 am 08:22 AM

この記事では、許可によって保護されたバックエンドとのフロントエンド統合を示し、next.jsを使用して機能的なedtech SaaSアプリケーションを構築します。 FrontEndはユーザーのアクセス許可を取得してUIの可視性を制御し、APIリクエストがロールベースに付着することを保証します

JavaScript:Web言語の汎用性の調査JavaScript:Web言語の汎用性の調査Apr 11, 2025 am 12:01 AM

JavaScriptは、現代のWeb開発のコア言語であり、その多様性と柔軟性に広く使用されています。 1)フロントエンド開発:DOM操作と最新のフレームワーク(React、Vue.JS、Angularなど)を通じて、動的なWebページとシングルページアプリケーションを構築します。 2)サーバー側の開発:node.jsは、非ブロッキングI/Oモデルを使用して、高い並行性とリアルタイムアプリケーションを処理します。 3)モバイルおよびデスクトップアプリケーション開発:クロスプラットフォーム開発は、反応および電子を通じて実現され、開発効率を向上させます。

JavaScriptの進化:現在の傾向と将来の見通しJavaScriptの進化:現在の傾向と将来の見通しApr 10, 2025 am 09:33 AM

JavaScriptの最新トレンドには、TypeScriptの台頭、最新のフレームワークとライブラリの人気、WebAssemblyの適用が含まれます。将来の見通しは、より強力なタイプシステム、サーバー側のJavaScriptの開発、人工知能と機械学習の拡大、およびIoTおよびEDGEコンピューティングの可能性をカバーしています。

See all articles

ホットAIツール

Undresser.AI Undress

Undresser.AI Undress

リアルなヌード写真を作成する AI 搭載アプリ

AI Clothes Remover

AI Clothes Remover

写真から衣服を削除するオンライン AI ツール。

Undress AI Tool

Undress AI Tool

脱衣画像を無料で

Clothoff.io

Clothoff.io

AI衣類リムーバー

AI Hentai Generator

AI Hentai Generator

AIヘンタイを無料で生成します。

ホットツール

SAP NetWeaver Server Adapter for Eclipse

SAP NetWeaver Server Adapter for Eclipse

Eclipse を SAP NetWeaver アプリケーション サーバーと統合します。

SublimeText3 Mac版

SublimeText3 Mac版

神レベルのコード編集ソフト(SublimeText3)

AtomエディタMac版ダウンロード

AtomエディタMac版ダウンロード

最も人気のあるオープンソースエディター

ドリームウィーバー CS6

ドリームウィーバー CS6

ビジュアル Web 開発ツール

EditPlus 中国語クラック版

EditPlus 中国語クラック版

サイズが小さく、構文の強調表示、コード プロンプト機能はサポートされていません