


JavaScript デザイン パターンとプロトタイプ パターン (Object.create とプロトタイプ) の概要_JavaScript スキル
プロトタイプモードの説明
説明: プロトタイプ インスタンスを使用して、新しいカスタマイズ可能なオブジェクトをコピーして作成します。新しいオブジェクトの場合、元のオブジェクトを作成する特定のプロセスを知る必要はありません。
プロセス: プロトタイプ => 新しい ProtoExam => 新しいオブジェクトにクローンを作成します;関連するコードを使用します:
This.name = '';
This.age = '';
This.sex = '';
}
Prototype.prototype.userInfo = function() {
Return '個人情報、名前: ' this.name '、年齢: ' this.age '、性別: ' this.sex '
';
}
2 つ以上の個人情報コンテンツが必須になりました:
var person1 = Object.create(proto);
person1.name = 'シャオミン';
person1.sex = '男性';
person1.age = 35;
person1.userInfo(); //
var person2 = Object.create(proto);
person2.name = 'Xiaohua';
person2.sex = '女性';
person2.age = 33;
person2.userInfo();
出力戻り値:
Object.create 命令
1>. 定義: プロトタイプ オブジェクトを指定でき、オプションのカスタム プロパティを含めることができるオブジェクトを作成します。 2> Object.create(proto [,properties]); 新しいオブジェクトのプロパティを構成するために使用されます。
書き込み可能: true|false、
列挙可能: true|false、
構成可能: true|false、
get:function(){return 10},
set:関数(値){}
}
}
カスタム属性には、次の 4 つのネイティブ属性があります:
値: カスタム属性値;
writable: この項目の値が編集可能かどうか。デフォルトは false です。true の場合、obj.prodField に値を割り当てることができます。それ以外の場合は読み取り専用です。 列挙可能: 列挙可能; 構成可能: 構成可能;
set、get アクセサー メソッドを含めることもできます。
このうち、[set, get] と value および writable は同時に出現できません。
1. プロトタイプ オブジェクト クラスを作成します:
コードをコピーします
コードは次のとおりです:
プロトタイプメソッドの作成:
コードをコピーします
コードは次のとおりです:
使用方法
1. ProtoClass.prototype;
を使用してオブジェクトを作成します。
var obj1 = Object.create(ProtoClass.prototype, {
foo:{値: 'obj1'、書き込み可能: true}
})
obj1 には ProtoClass プロトタイプ メソッド aMethod;
があります。
obj1.aMethod();
//未定義が出力され、メソッドはアクセス可能ですが、ProtoClass メンバーはアクセスできません
ただし、このメソッドは ProtoClass: の a、b、c のメンバー属性を実装できません。
2. インスタンス化された ProtoClass をプロトタイプとして使用します:
var proto = new ProtoClass();
var obj2 = Object.create(proto, {
foo:{value:'obj2'}
});
この方法で作成された obj2 には、ProtoClass のすべてのメンバー属性 a、b、c および aMethod プロトタイプ メソッドがあり、foo 読み取り専用データ属性
が追加されます。
obj2.a; //プロトクラス
obj2.c: //[オブジェクト]
obj2.b(); //
obj2.aMethod() //プロトクラス
obj2.foo; //obj2
3. サブクラスの継承:
function SubClass() {
}
SubClass.prototype = Object.create(ProtoClass.prototype ,{
foo:{値: 'サブクラス'}
});
SubClass.prototype.subMethod = function() {
this.a を返す || this.foo;
}
このメソッドは ProtoClass の aMethod メソッドに継承して実行できます。
var func = 新しいサブクラス();
func.aMethod() ;//未定義、ProtoClass、a、b、c のメンバー属性を読み取ることができません
func.subMethod();//サブクラス
サブクラスが ProtoClass のメンバー属性を読み取れるようにするには、サブクラスを変更する必要があります:
関数サブクラス()
{
ProtoClass.call(this);
}
//その他のコード;
このメソッドは ProtoClass;:
のメンバー属性とプロトタイプ メソッドを取得できます。var func = 新しいサブクラス();
func.aMethod() ;//ProtoClass
func.subMethod();//ProtoClass
もう 1 つの方法は、インスタンス化された ProtoClass オブジェクトを SubClass のプロトタイプとして使用することです。
var proto = new ProtoClass();
関数 SubClass() {
}
SubClass.prototype = Object.create(proto, {
foo:{値: 'サブクラス'}
});
このようにして、SubClass がインスタンス化された後、ProtoClass のすべてのプロパティとプロトタイプ メソッドを取得し、読み取り専用のデータ属性 foo;
を作成できます。var func = 新しいサブクラス();
func.foo; // サブクラス
func.a; //プロトクラス
func.b(); //
func.c; //[オブジェクト]
func.aMethod(); //プロトクラス
4. 別の作成継承メソッドは、インスタンス化された ProtoClass をプロトタイプとして使用する Object.create と同じ効果があります。
this.foo = 'subclass' //ただし、ここで読み書きできます
; }
SubClass.prototype = new ProtoClass();
Object.create 関連の手順
Object.create は、新しいオブジェクトを作成するために使用されます。Object の場合、プロトタイプは null であり、関数は new Object() または {};
と同じです。
関数の場合、new FunctionName と同じ効果があります。
var o = {}
//
と同等 var o2 = Object.create({});
//両方のコンストラクターは同じです;
//----------------------------------------
関数 func() {
This.a = 'func';
}
func.prototype.method = function() {
これを返します。a;
}
//[同じ効果]
と同等
var newfunc2 = Object.create(Object.prototype/*Function.prototype||function(){}*/, {
a: {値: 'func'、書き込み可能: true}、
メソッド: {value: function() {return this.a;} }
});
newfunc は関数 func() {...}、newfunc2 は関数 Function {Native}
proto が null でない場合、それはインスタンス化された値、つまり新しい値です。JavaScript のほとんどのオブジェクトには、このオブジェクトがどの関数によってインスタンス化されたかを示すコンストラクター属性があります。 propertiesField はオプションで、新しく作成されたオブジェクトに必要なメンバーのプロパティまたはメソッドを設定します。

ホットAIツール

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

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

Undress AI Tool
脱衣画像を無料で

Clothoff.io
AI衣類リムーバー

Video Face Swap
完全無料の AI 顔交換ツールを使用して、あらゆるビデオの顔を簡単に交換できます。

人気の記事

ホットツール

メモ帳++7.3.1
使いやすく無料のコードエディター

SublimeText3 中国語版
中国語版、とても使いやすい

ゼンドスタジオ 13.0.1
強力な PHP 統合開発環境

ドリームウィーバー CS6
ビジュアル Web 開発ツール

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

ホットトピック











Java フレームワークにおけるデザイン パターンとアーキテクチャ パターンの違いは、デザイン パターンがソフトウェア設計における一般的な問題に対する抽象的な解決策を定義し、ファクトリ パターンなどのクラスとオブジェクト間の相互作用に焦点を当てていることです。アーキテクチャ パターンは、階層化アーキテクチャなどのシステム コンポーネントの編成と相互作用に焦点を当てて、システム構造とモジュールの間の関係を定義します。

デコレータ パターンは、元のクラスを変更せずにオブジェクトの機能を動的に追加できる構造設計パターンです。抽象コンポーネント、具象コンポーネント、抽象デコレータ、具象デコレータの連携によって実装され、ニーズの変化に合わせてクラス機能を柔軟に拡張できます。この例では、ミルクとモカのデコレーターが総額 2.29 ドルで Espresso に追加されており、オブジェクトの動作を動的に変更するデコレーター パターンの力を示しています。

1. ファクトリ パターン: オブジェクト作成とビジネス ロジックを分離し、ファクトリ クラスを通じて指定された型のオブジェクトを作成します。 2. オブザーバー パターン: サブジェクト オブジェクトが状態の変化をオブザーバー オブジェクトに通知できるようにし、疎結合とオブザーバー パターンを実現します。

デザイン パターンは、再利用可能で拡張可能なソリューションを提供することで、コード メンテナンスの課題を解決します。 オブザーバー パターン: オブジェクトがイベントをサブスクライブし、イベントが発生したときに通知を受信できるようにします。ファクトリ パターン: 具象クラスに依存せずにオブジェクトを作成するための集中的な方法を提供します。シングルトン パターン: クラスには、グローバルにアクセス可能なオブジェクトの作成に使用されるインスタンスが 1 つだけ存在することが保証されます。

TDD は、高品質の PHP コードを作成するために使用されます。その手順には、テスト ケースを作成し、期待される機能を記述し、テスト ケースを失敗させることが含まれます。過度な最適化や詳細な設計を行わずに、テスト ケースのみが通過するようにコードを記述します。テスト ケースが合格したら、コードを最適化およびリファクタリングして、可読性、保守性、およびスケーラビリティを向上させます。

Guice フレームワークは、次のような多くの設計パターンを適用します。 シングルトン パターン: @Singleton アノテーションによってクラスのインスタンスが 1 つだけであることを保証します。ファクトリ メソッド パターン: @Provides アノテーションを使用してファクトリ メソッドを作成し、依存関係の注入中にオブジェクト インスタンスを取得します。戦略モード: アルゴリズムをさまざまな戦略クラスにカプセル化し、@Named アノテーションを通じて特定の戦略を指定します。

アダプター パターンは、互換性のないオブジェクトが連携できるようにする構造設計パターンであり、オブジェクトがスムーズに対話できるように、あるインターフェイスを別のインターフェイスに変換します。オブジェクト アダプタは、適応されたオブジェクトを含むアダプタ オブジェクトを作成し、ターゲット インターフェイスを実装することにより、アダプタ パターンを実装します。実際のケースでは、クライアント (MediaPlayer など) はアダプター モードを通じて高度な形式のメディア (VLC など) を再生できますが、クライアント自体は通常のメディア形式 (MP3 など) のみをサポートします。

SpringMVC フレームワークは次の設計パターンを使用します: 1. シングルトン モード: Spring コンテナーを管理します。 2. ファサード モード: コントローラー、ビュー、およびモデルの対話を調整します。 3. ストラテジ モード: リクエストに基づいてリクエスト ハンドラーを選択します。 : アプリケーション イベントを公開し、リッスンします。これらの設計パターンは SpringMVC の機能と柔軟性を強化し、開発者が効率的で保守可能なアプリケーションを作成できるようにします。
