様々な方法JavaScriptの実装クラス(RPM)

抜粋: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 = 'プログラマ;
     IFtypeof演算(coder._init)== '未定義' 
    { 
        この .coding = 機能()
        { 
            アラート(「Iコード」を書き込む); 
        }; 
        この ._init = trueに; 
    } 
}

 

 

ます。https://www.cnblogs.com/JoannaQ/archive/2013/05/01/3052721.htmlで再現

おすすめ

転載: blog.csdn.net/weixin_34406796/article/details/93056263