ホームページ > ウェブフロントエンド > jsチュートリアル > JavaScript オブジェクト指向デザイン 2 コンストラクター pattern_js オブジェクト指向

JavaScript オブジェクト指向デザイン 2 コンストラクター pattern_js オブジェクト指向

WBOY
リリース: 2016-05-16 17:58:07
オリジナル
986 人が閲覧しました

コンストラクター パターンを使用してファクトリ パターンを書き換えます。

コードをコピー コードは次のとおりです:

関数 従業員(名前、年齢、職業) {
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 を指すコンストラクター属性があります。次のテストを実行できます




コードをコピーします。
コードは次のとおりです: alert(Jim instanceof Employee) //true alert(Sun instanceof Employee);//true
これら 2 つのオブジェクトは同時にオブジェクト型であり、次のコードを通じて検出できます。



コードをコピーします
コードは次のとおりです。 alert(Jim instanceof Object) // true alert(Suninstanceof Object);//true
カスタム コンストラクターを作成するということは、将来、そのインスタンスを特定の型としてマークできることを意味し、これはコンストラクターでもあります。パターンは工場出荷時のパターンよりも優れています。
以下では、コンストラクターについて詳しく説明します。
コンストラクターを関数として扱います。
コンストラクターと他の関数の唯一の違いは、それらを呼び出す方法です。ただし、コンストラクターも関数であり、コンストラクターを定義するための特別な構文はありません。実際、どの関数も new 経由でのみ呼び出すことができ、その場合はコンストラクターとして使用できます。たとえば、上記の new メソッドを使用して Employee を呼び出すだけでなく、次の方法でも呼び出すことができます。




コードをコピー
コードは次のとおりです: //Call Employee("通常の関数として" Sun", 28, "SoftWare Engineer") //ウィンドウに追加 window.sayName();//Sun




コードをコピーします
コンストラクターの問題
主な問題コンストラクターを使用するということは、上記の 2 つのオブジェクトの SayName メソッドが実際には異なる関数のインスタンスであることを意味します。これは、次のメソッドで証明できます。 //false
ただし、同じタスクを完了する 2 つの Function インスタンスを作成するため、上記の関数を次のように書き換えます



コードをコピー


コードは次のとおりです。 functionsayName() {
alert(this.name);
これは次の問題を解決します。 2 つの関数 同じ問題ですが、また新たな問題が発生します。グローバル スコープで定義されたこの関数は、実際には特定のオブジェクトによってのみ参照できます。最も恐ろしい問題は、そのオブジェクトに多数のメソッドを定義する必要がある場合です。多くのグローバル関数を定義するため、このカスタム参照型にはカプセル化がまったくありません。
ソース:php.cn
このウェブサイトの声明
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。
最新の問題
人気のチュートリアル
詳細>
最新のダウンロード
詳細>
ウェブエフェクト
公式サイト
サイト素材
フロントエンドテンプレート