JavaScript対象向けの2つの書き方と違い

1630 ワード

javascriptの対象JSは一種の動態言語として文法的にかなり自由度があるので、機能としてN種の書き方がある局面をもたらしました。JSでOOPを実現するには、一般的に2つの方法があります。1つ目は、thisキーワードfunctionを使用します。 Class 1(){    this.onclick = function(e)    {         for (var i=0; i < 1000; i++)        {             var a. = new Date();        }     }  }  thisを使用する方法は、オブジェクトに属性と方法を柔軟に追加することができ、ほとんどのOOP言語と同様に動作中でも追加できます。第二種類:プロトタイプのキーワードを使うfunction clickFun(e){    for (var i=0; i < 1000; i++)    {         var a. = new Date();    } }  機能 Class 2(){  }  Class 2.prototype.onclick = clickFnc;  このような使い方からして、初めて柔軟に見えるものはない。ただし、オブジェクトのnewが出る前に、オブジェクトの属性や方法を随時追加することもできます。しかし、彼らは同じではありません。比較的に第一の方法が好きです。第一の方法は比較的集中していますので、コードを読みやすいです。しかし、運行する時、彼らの運行の効率はかなり違っています。テストコードを見せてください。 talk = new Aray()  機能 Test 1(){    var a. = new Date();    for (var i=0; i < 10000; i++)    {         var c = new クラス1()        //total.push(c)    }     var b = new Date();    alert(b.getTime()-a.getTime();  機能 Test 2(){    var a. = new Date();    for (var i=0; i < 10000; i++)    {         var c = new クラス2()        //total.push(c)    }     var b = new Date();    alert(b.getTime()-a.getTime();  第1ステップ実行時間のテスト:Test 1()は142 ms必要であり、Test 2()は50 msしかかからないことが判明した。発見時間効率的には、prototypeの方法は、thisに対してより効率的である。  javascriptの対象は第二段階でメモリ占有のテストを行い、total.push(c)を行います。この行のコメントを削除します。行列に入れるためには、作成時にオブジェクトが多い時に、引用されていないオブジェクトがGCになります。その結果、差は一般的なものではなく、第一の方法は二三十Mのメモリを占有し、第二の方法は百K以上を必要とすることがわかった。javascriptは、この2つのコードを処理する際に、まずJSの解像器を作成し、各オブジェクトに個別の方法を作成し、メモリのオーバーヘッドを増加させ、同時に方法を作成する時に、運行時間を増加させたと推定します。第二に、JSの解像度はほとんどのOOPコンパイラと同じで、対象のデータセグメントとメソッドセグメントを別々に記憶しています。対象のプライベートデータについては、各オブジェクト1つです。これらの方法は、共通の方法段に置くので、実行時間とメモリのオーバヘッドを減らすことができます。