簡體   English   中英

如何在面向對象的方法中將類似的方法和變量組合在一起?

[英]How do I group similar methods and variables together in an object oriented approach?

我在尋找這樣做的標准方式..這個職位在這里探索3種方式。 在這里 您應該以哪種方式用於通用案例......這是一個偏好問題。
例如,如果我使用實例化方式..我有兩行代碼而不是一行...我必須實例化對象...而不是調用方法...如果我使用靜態類型實現而不是不必實例化任何對象。 模塊模式的第三個選項......由於它是自動執行的,因此成本更高。

如果我必須給它們命名:

  1. 對象 - 非靜態
  2. 對象 - 靜態
  3. 模塊模式

一般建議采用哪種方式,因此每次開始合並方法時我都不必討論這個問題。

以下是我想要整合的收集方法的示例。

/********************
group:checks
********************/

var patterns = 
  {
  name: /^[a-zA-Z-\s]{1,20}$/,
  email: /^[a-zA-Z0-9._(-)]+@[a-zA-Z0-9.(-)]+\.[a-zA-Z]{1,4}$/,
  pass: /.{6,40}/,
  url:  /^[(-)\w&:\/\.=\?,#+]{1,}$/,
  aml:  /<(.+)_([a-z]){1}>$/
  };

/*
- check_generic() - generic 
*/

function check_generic(reg_ex_in,text,html_id,response)
  {
  if(!reg_ex_in.exec(text.value))
    {
    fill_id(html_id,response);
    return 0;
    }
  return 1;
  }

/*
- check_empty() - checks for empty text 
*/

function check_empty(text,html_id,response) 
  {
  for(var a=0;a<text.length;a++)
    {
    if(text[a].value==='')
      {
      fill_id(html_id,response);
      return 0;
      }
    }
  return 1;
  }

/*
- check_same() - checks if two text entries are the same 
*/

function check_same(text1,text2,html_id,response)
  {
  if((text1.value)!==(text2.value))
    {
    fill_id(html_id,response);return 0;
    }
  fill_id(html_id,'');
  return 1;
  }

這是我通常遵循的規則:

如果我將一組無狀態靜態函數組合在一起(實際上是命名它們),我會將它們粘貼在一個對象中:

var MyNamespace = {
   patterns: {
      name: /^[a-zA-Z-\s]{1,20}$/,
      email: /^[a-zA-Z0-9._(-)]+@[a-zA-Z0-9.(-)]+\.[a-zA-Z]{1,4}$/,
      pass: /.{6,40}/,
      url:  /^[(-)\w&:\/\.=\?,#+]{1,}$/,
      aml:  /<(.+)_([a-z]){1}>$/
   },

   check_generic: function(reg_ex_in,text,html_id,response)
   {
      if(!reg_ex_in.exec(text.value))
      {
        fill_id(html_id,response);
        return 0;
      }
      return 1;
   }
};

如果我想要一個有狀態的類實現而不關心訪問控制 ,我將使用實例化方法:

var MyClass = function(param) {
    // initialize here
};
MyClass.prototype = {
   // method definitions here
};

如果我正在做一些需要訪問控制的更復雜的東西,我將使用模塊模式:

var mod = (function() {
    var o = {};
    var _p = "myprivatestring";
    o.p = "mypublicstring";

    o.myfunc = function() {
        this.p = _p;
    };

    return o;
})();

console.log(mod.p);
mod.myfunc();
console.log(mod.p);

http://jsfiddle.net/dbrecht/WLN6Y/

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM