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つです。これらの方法は、共通の方法段に置くので、実行時間とメモリのオーバヘッドを減らすことができます。