、new演算子+オブジェクトは、オブジェクトを作成します。
1つのVARの人=新しいオブジェクト(); 2 person.name = "リージ"。 3 person.age = 21。 4 person.family = [ "リダ"、 "リール"、 "wangwu"]。 5 person.say =関数(){ 6アラート(this.name)。 7 }
第二に、オブジェクトリテラルスタイルを作成します
1つのVAR者= { 2名: "リージ"、 3年齢:21、 4ファミリー:[ "リダ"、 "リール"、 "wangwu"]、 5言う:機能(){ 6アラート(this.name)。 7} 8}。
複数のオブジェクトを作成するために、同じインターフェイスを使用してこれらの2つの方法は、それがこの問題を解決するために、工場出荷時のモデルが開発された、重複したコードの多くを生成します。
第三に、工場出荷時のパターン
createPerson機能(名前、年齢、家族){ VAR = O新しい新しいオブジェクト(); o.name =名; o.age =年齢; o.family =ファミリー; o.say =機能(){ アラート(this.name) ; } 戻りO; } VAR = PERSON1 createPerson( "リシ"、21は、[ "リダ"、 "リール"、 "wangwu"]); //その例のみオブジェクトが決定され、彼はのinstanceofを決定することができません、コンストラクタは判断することができる 。VAR = PERSON2 createPerson( "wangwu"、18は、[ "リダ"、 "リール"、 "リシ"])
はconsole.log(PERSON1 instanceofのオブジェクト); // trueにします
ファクトリーモードは、複数のオブジェクトの繰り返しインスタンスの問題を解決し、しかし、すべてのオブジェクトであるように、本実施形態において等日、アレイ、とは異なり、得られた物体認識の問題(工場モードを解決するが、オブジェクトの種類を特定する方法がありません。 Oは、オブジェクトのタイプ、オブジェクト、そうそこコンストラクタモード)であり、オブジェクトです。
第四に、モデルのコンストラクタ
関数人(名前、年齢、家族){ this.name =名; this.age =年齢; this.family =家族。 this.say =関数(){ アラート(this.name)。 } } VARのPERSON1 =新しい人物( "リシ"、21、[ "リダ"、 "リール"、 "wangwu"])。 VaRのPERSON2 =新しい人物( "リシ"、21、[ "リダ"、 "リール"、 "リシ"])。 console.log(オブジェクトのinstanceof PERSON1)。//真 にconsole.log(人のinstanceof PERSON1)。//真 にconsole.log(オブジェクトのinstanceof PERSON2)。//真 にconsole.log(人のinstanceof PERSON2)。//真
にconsole.log(person1.constructor)。//コンストラクタ属性返回对创建此对象的数组、函数的引用
コンストラクタは通常の関数であり、通常の関数を作成する方法は、コンストラクタの最初の文字は、習慣を大文字にすることを除いて、違いはありません。
他には、コンストラクターがコールする新しいキーワードを使用する必要がある一方で、直接呼び出され、通常の関数を呼び出す別の方法です。この方法では、コンストラクタを呼び出すと、実際には次の4つのステップを通過します。
(1)新しいオブジェクトを作成します。
(2)コンストラクタの範囲は、新しいオブジェクト(新規オブジェクトにので、この点)を割り当てます。
(3)コンストラクタコード(新しいオブジェクト属性に追加)を行います。
(4)新しいオブジェクトを返します。
比較の工場モデルは、次のような違いがあります。
1、明示的にオブジェクトを作成しません。
図2に示すように、直接、このオブジェクトの属性およびメソッドに割り当てられました
3、ノーリターン文はありません
が、この方法では問題なく使いやすいですが、ありません。あなたは100人を作成する必要がある場合たとえば、100個のオブジェクトは100個の、そのようなオブジェクトを作成するときに、別の個人、それらの間の私有財産は、等しくないが、オブジェクトを追加100を作成する方法がありますオブジェクトは100メソッドを作成しますが、これらの方法は同じ関数で、メモリ空間を無駄にする必要はありませんので、当社独自の参照型はカプセル化なしですべてで、これプロトタイプモデルを作成します。
第五に、プロトタイプモデル
1関数人(){ 2} 3 4 Person.prototype.name = "リージ"。 = 21 5 Person.prototype.age。 6 Person.prototype.family = [ "リダ"、 "リール"、 "wangwu"]。 7 Person.prototype.say =関数(){ 8アラート(this.name)。 9}。 10にconsole.log(Person.prototype)。//オブジェクト{名: 'リージ'、年齢:21、ファミリー:配列[3]} 11 12のvar PERSON1 =新しい人()。//创建一个实例PERSON1 13にconsole.log(person1.name)。//リージ 14 15のvar PERSON2 =新しい人(); //创建实例PERSON2 16 person2.name = "wangwu"。 17 person2.family = [ "リダ"、 "リール"、 "リシ"]。 18にconsole.log(PERSON2)。 19 //にconsole.log(PERSON2。 20にconsole.log(person2.age)。// 21
利点のプロトタイプモデルは、すべてのオブジェクトインスタンスは、そのプロパティとメソッド(いわゆる共通の属性)、あなたはまた、あなたができる、コードのような16、17行を(いわゆる私有財産)をそれらの属性(メソッド)の例を設定することができますを共有するということですプロトタイプオブジェクトに同じ名前の属性(メソッド)をカバーします。
六、混合モード(モードコンストラクタ+原型パターン)
コンストラクタインスタンスのプロパティを定義するためのパターン、および共有プロトタイプモデルの属性を定義する方法
人関数1(名前、年齢、家族){ 2 this.name =名; 3 this.age =年齢; 4 this.family =ファミリー; 5} 6。 7 = {Person.prototype。 8コンストラクタ:人、各//。関数プロトタイプのプロパティ、オブジェクト点のプロトタイプを有する、プロトタイプオブジェクトは、関数プロトタイププロパティ場所へのポインタであるコンストラクタ、属性を有している 。図9は、言う:機能(){ 10アラート(this.name); 11} 12である} 13である 14新しい新しいPERSON1 = VAR人( "リシ"、21は、[ "リダ"、 "リール"、 "wangwu"]); 15にconsole.log(PERSON1); 16 VAR =新しい新しいPERSON2人( "wangwu"、21は、[ "リダ""リール""リシ「]) 。17にconsole.log(PERSON2)。
混合モードを参照して、見ることができるように、同じ方法を共有するだけでなく、各インスタンスは、それ自身のプライベートな性質を有していることを確実にします。省メモリを最大化