JSには、オブジェクトを作成し、オブジェクトに含まれるプロパティとメソッドを操作できるいくつかのモードがあります。
一般的に言えば、コンストラクター名の最初の文字は大文字であり、非建設者名の最初の文字は小文字です。もちろん、コンストラクターと一般的な関数の唯一の違いは、呼び出し方法の違いです。したがって、任意の関数が新規で呼び出される限り、コンストラクターとして使用できます。それが新しい介して呼び出されない場合、それは一般的な関数と同じです。
これらのパターンについての私の理解について話させてください:
工場モード:一般的な関数を作成し、関数にオブジェクトオブジェクトを作成し、オブジェクトに属性とメソッドを追加し、その値を割り当て、最後にオブジェクトを返します。オブジェクトタイプは認識できません。
コンストラクターモード:コンストラクターを作成し、これを使用して値を割り当てます。インスタンスが作成されるたびに、メソッドが1回作成され、各メソッドは同じコマンドを実行します。この欠点は、メソッドをグローバル環境に入れることで行うことができますが、この方法ではカプセル化はありません。ただし、プロトタイプモードで解決できます。
プロトタイプパターン:各関数にはプロトタイププロパティがあります。これはポインターであり、その関数によって作成されたすべてのインスタンスで共有されるプロパティとメソッドを含むオブジェクトを指します。
プロトタイプオブジェクト、コンストラクター、およびインスタンス間の関係は次のとおりです。
図:1:コンストラクターとコンストラクターによって作成されたインスタンスのプロトタイプ属性は、コンストラクターのプロトタイプオブジェクトを指します。
2:コンストラクターのプロトタイプオブジェクトには、コンストラクター属性があり、コンストラクターを指します。
3:コンストラクターのプロトタイプオブジェクトに含まれるすべてのプロパティとメソッドは、コンストラクターによって作成されたすべてのインスタンスで共有できます。
オブジェクトリテラルを使用してプロトタイプオブジェクトを書き換えた後、コンストラクターはオブジェクトコンストラクターを指します。別のコンストラクターを指す必要がある場合は、次のようなプロトタイプオブジェクトのコンストラクター属性の値を変更する必要があります。このようにして、人のプロトタイプオブジェクトが書き換えられたとしても、プロトタイプオブジェクトのコンストラクターは依然として人物コンストラクターを指しています。
最初にインスタンスを作成するとき:プロパティまたはメソッドを直接追加すると、インスタンスにアクセスできます。
プロトタイプオブジェクトが書き換えられると、コンストラクターのプロトタイプは新しいプロトタイプオブジェクトを指しますが、以前に作成されたインスタンスのプロトタイプは元のプロトタイプオブジェクトを指しているため、インスタンスは新しいプロトタイプオブジェクトの新しいプロパティまたは新しいメソッドにアクセスできません。
プロトタイプオブジェクトには共有プロパティとメソッドが含まれているため、各インスタンスにはこの情報があるため、インスタンスの間に違いはなく、パラメーターを渡すことはできません。これは私たちが望むものではありません。各インスタンスには共通の情報と異なる情報があるため、コンストラクターモードとプロトタイプモードの組み合わせを使用できます。
コンストラクターモードとプロトタイプモードの組み合わせを使用します。
状態プロトタイプパターン:独立したコンストラクターとプロトタイプオブジェクトを組み合わせ、コンストラクターのプロトタイプを初期化し、メソッドを追加します。
メソッドが存在しない場合、プロトタイプオブジェクトに追加され、プロトタイプが初期化された場合にのみ実行されます。
寄生コンストラクタモード:工場モードと同様に、違いは次のとおりです。寄生コンストラクタモードはコンストラクターであり、インスタンスは新品を通じて作成されます。
安定したコンストラクターパターン:パブリックプロパティはなく、その方法はこのオブジェクトを参照していません。インスタンスを作成するときに新しいものは使用されません。プロパティへのアクセス(つまり、着信データ)のみがメソッドを使用して行われます。
JavaScript作成オブジェクトのいくつかのモードの上記の紹介は、私があなたと共有するすべてのコンテンツです。参照を提供できることを願っています。wulin.comをもっとサポートできることを願っています。