JavaScript享元モード原理と使い方例の詳細


本論文の実例は、JavaScript享元モード原理と使い方を述べている。皆さんに参考にしてあげます。具体的には以下の通りです。
二つの例の対比によって,享元モードの特徴を明らかにした。享元モードは性能(空間複雑度)を向上させるための設計モードであり,享元モードは多くの非常に類似した種類のオーバーヘッドを回避できる。
第1の例では、享元モードが使用されず、時間と空間の使用度が計算される。
車の登録をする都市があります。
(1)自動車類

/**
   *    
   *   
   *    
   *     
   *         
   */
  var Car = function(make,model,year,owner,tag,renewDate){
    this.make = make;
    this.model = model;
    this.year = year;
    this.owner = owner;
    this.tag = tag;
    this.renewDate = renewDate;
    this.getMake = function(){
      return this.make;
    }
  }
(2)装飾者モードを使う--関数の計算時間

//    ..        
  var simpleProfiler = function(componet){
    this.componet = componet;
    this.action = function(methodName){
      var self = this;
      var method = componet[methodName];
      //           
      if(typeof method == "function"){
        var startDate = new Date().getTime();//    
        method.apply(self.componet,arguments);
        var endDate = new Date();//    
        alert(endDate - startDate);        
      }
    }
  }  
(3)具体的な例として、4150000台の車は登録が必要です。

var ca = new Array();
  function addCar(){
    this.begin = function(){
      for (var i = 0; i < 4150000; i++) {
        ca.push(new Car("BMW","  ","2017-10-18",
          "","GBMW88","2017-10-19"));
      }
    }
  }
  new simpleProfiler(new addCar()).action("begin")
第二の例:享元モードを使用する
(1)自動車類

/**
   *    
   *   
   *    
   *     
   *         
   */
  var Car = function(make,model,year){
    this.make = make;
    this.model = model;
    this.year = year;
    this.getMake = function(){
      return this.make;
    }
  }
(2)一例モデルの簡易工場

//         
  var myCarInfo = function(){
    this.createCar = function(make,model,year,owner,tag,renewDate){
      var c = carInfoFactory(make,model,year);
      c["owner"] = owner;
      c["tag"] = tag;
      c["renewDate"] = renewDate;
      return c;
    }
  }
  var carInfoFactory = (function(){
    var carInfo = {};
    return function(make,model,year){
      if(carInfo[make+model+year]){
        return carInfo[make+model+year];
      }else{
        var newCar = new Car(make,model,year);
        carInfo[make+model+year] = newCar;
        return newCar;
        a
      }
    }
  })();
(3)4150000台の車があります。登録が必要です。

var test = new myCarInfo();
  var startDate = new Date().getTime();
  var ca = new Array();
  for (var i = 0; i < 4150000; i++) {

    ca.push(test.createCar("BMW","  ","2017-10-18",
          "","GBMW88","2017-10-19"))
  }
  var endDate = new Date();
  alert(endDate - startDate);
上記の2つの例から、第1の例は、享元モードを使用していないが、第2の使用に比べて、享元モードの消費時間は少ないが、空間消費が大きく、第2の時間が多く、しかし、空間消費が小さいことが分かる。
第1のケース図解:毎回同じインスタンスが生成される。
 

第二の場合:内在部分(不変)+外部状態(変化)の図解

関心のある友達はオンラインHTML/CSS/JavaScript先端コードを使ってデバッグ実行ツールを実行できます。http://tools.jb51.net/code/WebCodeRunは上記のコードの運行効果をテストします。
さらに、JavaScriptに関する内容については、当駅のテーマを見ることができます。「javascript対象向け入門教程」、「JavaScriptエラーとデバッグテクニックのまとめ」、「JavaScriptデータ構造とアルゴリズム技術のまとめ」、「JavaScriptはアルゴリズムと技術の総括を遍歴します。」、「JavaScript数学演算の使い方のまとめ
本論文で述べたように、JavaScriptプログラムの設計に役に立ちます。