抜粋:http://www.nowamagic.net/javascript/js_MethodsToCreateClass.php
コンストラクタ
関数コーダ() { この .nameの=「現代魔法」; この .JOBは= 'ウェブ開発者; この .coding = 機能() {アラート(「私は、コードを書いている」);} } のvarコーダ= 新新コーダ( ); アラート(coder.name); coder.coding()。
ファクトリメソッド
関数createCoderFactory() { VAR OBJ = 新しい新しいオブジェクト(); obj.name = '現代魔法' ; obj.job = 'プログラマ; obj.coding = 機能() { アラート( '私はコードを書いています' ); } ; 戻りOBJを; } VARコーダ= createCoderFactory(); 警告(coder.name); ()をcoder.coding。
ファクトリメソッドとコンストラクタは同じ欠点は、それぞれのインスタンスを作成することである必要があり、各機能は、クラスをインスタンス化します。
プロトタイプチェーン
機能コーダ(){} coder.prototype.name = '現代魔法' ; coder.prototype.job = 'プログラマ; coder.prototype.coding = 機能(){ アラート( '私はコードを書いています' ); }; VARコーダー= 新新コーダ(); 警告(coder.name); coder.coding();
プロトタイプチェーンは欠点があれば、他のインスタンスの変化は、それと共に変化するように、すべてのプロパティが共有されることである持っています。以下のような:
VAR coder1 = 新新コーダ(); VAR coder2 = 新新コーダ(); 警告(coder1.name); / * 表示近代マジック* / coder2.name = 'nowamagic' ; 警告(coder1.name); / * 表示nowamagic * / アラート(coder2.name); / * これもnowamagic示されています* /
混合モード
これら三つのすべては、自分の欠点を持っているので、我々は改善する必要があります。
関数コーダ() { この .nameの= '現代魔法' ; この .JOB = 'プログラマ; } coder.prototype.coding = 機能(){ アラート( '私はコードを書いています' ); };
チェーンのダイナミクス
最初の3の欠点は、解決する方法があります。
関数コーダ() { この .nameの= '現代魔法' ; この .JOB = 'プログラマ; IF(typeof演算(coder._init)== '未定義' ) { この .coding = 機能() { アラート(「Iコード」を書き込む); }; この ._init = trueに; } }
ます。https://www.cnblogs.com/JoannaQ/archive/2013/05/01/3052721.htmlで再現