コンストラクター パターンを使用してファクトリ パターンを書き換えます。
関数 従業員(名前、年齢、職業) {
this.name = 名前;
this.job = ジョブ;
alert(this.name); 🎜>} ;
}
var Jim = new Employee("jim", 22, "Software Engineer");
var Sun = new Employee("Sun", 24, "Doctor"); 🎜>Jim .sayName();
Sun.sayName();
上記のコードでは、Employee 関数が CreateEmployee 関数と置き換えられています。
なし 表示された作成オブジェクト
は、return ステートメント
を使用せずに、プロパティとメソッドをこのオブジェクト
に直接割り当てます。 Employee クラスの新しいインスタンスを作成するには、 new 演算子を使用する必要があります。これには実際には 4 つのステップが含まれます:
新しいオブジェクトを作成します
コンストラクターのスコープを新しいオブジェクトに割り当てます
コンストラクター内のコードを実行します
新しいオブジェクトを返します
最後に、Jim と Sun上記のコードでは、2 つの異なる Employee 値を保存します。両方のインスタンスには、Employee を指すコンストラクター属性があります。次のテストを実行できます
コードをコピーします。
これら 2 つのオブジェクトは同時にオブジェクト型であり、次のコードを通じて検出できます。
コードをコピーします
カスタム コンストラクターを作成するということは、将来、そのインスタンスを特定の型としてマークできることを意味し、これはコンストラクターでもあります。パターンは工場出荷時のパターンよりも優れています。
以下では、コンストラクターについて詳しく説明します。
コンストラクターを関数として扱います。
コンストラクターと他の関数の唯一の違いは、それらを呼び出す方法です。ただし、コンストラクターも関数であり、コンストラクターを定義するための特別な構文はありません。実際、どの関数も new 経由でのみ呼び出すことができ、その場合はコンストラクターとして使用できます。たとえば、上記の new メソッドを使用して Employee を呼び出すだけでなく、次の方法でも呼び出すことができます。
コードをコピー
コードは次のとおりです: //Call Employee("通常の関数として" Sun", 28, "SoftWare Engineer") //ウィンドウに追加 window.sayName();//Sun
コードをコピーします
コンストラクターの問題
主な問題コンストラクターを使用するということは、上記の 2 つのオブジェクトの SayName メソッドが実際には異なる関数のインスタンスであることを意味します。これは、次のメソッドで証明できます。 //false
ただし、同じタスクを完了する 2 つの Function インスタンスを作成するため、上記の関数を次のように書き換えます
コードをコピー
コードは次のとおりです。
functionsayName() {
alert(this.name);
これは次の問題を解決します。 2 つの関数 同じ問題ですが、また新たな問題が発生します。グローバル スコープで定義されたこの関数は、実際には特定のオブジェクトによってのみ参照できます。最も恐ろしい問題は、そのオブジェクトに多数のメソッドを定義する必要がある場合です。多くのグローバル関数を定義するため、このカスタム参照型にはカプセル化がまったくありません。