定義:一連のアルゴリズムを定義し、それらを1つずつ関数にカプセル化するか、属性としてオブジェクトに均一にカプセル化することができ、メソッドを定義できます。この方法は、パラメーターに基づいて対応するアルゴリズムを自動的に選択および実行できます。
通常、関数を実装するときに選択できる多くのオプションがある状況で使用されます。
例1:従業員の給与、パフォーマンスグレードS、A、B、およびCに基づいて年末のボーナスを計算します。
//すべてのアルゴリズムをカプセル化するポリシーオブジェクトvar戦略= {'s':function(salary){return Salary*4; }、 'a':function(salary){return Salary*3; }、 'b':function(salary){return Salary*2; }、 'c':function(salary){return Salary*1; }} //自動選択の方法を定義するアルゴリズムvar calucleculatebonus = function(level、salary){return Strategies [level](salary);} // calculatebonus( 's'、9000); // 36000CalculateBonus( 'B'、5000); // 10000例2:フォーム検証
//検証アルゴリズムを定義するポリシーオブジェクトvar戦略= function(){isempty:function(value、errormsg){if(value = ''){return errormsg; }} outrangle:function(value、min、max、errormsg){if(value.length> max || value.length <min){return errormsg; }} insame:function(oldvalue、newValue、errormsg){if(newValue!== oldValue){return errormsg; }} ismobile:function(value、errormsg){if(!/(^1 [3 | 5 | 8] [0-9] {9} $)/。test(value)){return errormsg; }} ......}また、次のValidatorクラスを定義することはできず、現在の入力アイテムを確認するためにフォーカスイベントの損失がトリガーされたときに、戦略オブジェクトの属性メソッドを直接呼び出すこともできます。
// define balidatorvar validator = fultion(){this.cache = [];} validator.prototype.add = function(elem、rules){var self = this; for(var i = 0、rule; rule = rule = rule [i ++]){(function(rool){var Straptey.strategy.split( ':'); var errormsg = rule.errormsg; self.cache.push(function(){var Strategy = strategy.shift(); rettremantary.push(elem.value); retrention.push(elem.value);戦略[戦略] .Apply(Elem、Strategyary); Rule)}}} prototype.start = function(){for(var i = 0、func = this.cache [i ++]){var errormsg = func(); if(errormsg){return errormsg; }}}使用:
var validator = new validator(); validator.add(elem.username、[{strategy: 'isempty'、errormsg: 'username nable emact'}}、{戦略: 'outrangle:6:12'、errormsg: 'ユーザー名の長さは6-12ビット'})));添付ファイル:パラメーター構成オブジェクト
関数foo(a、b、c、d、e、f ...)がある場合、多くのパラメーターがあります。そのような関数は使用が困難で、パラメーターは覚えにくいです!より良い方法は、オブジェクトを使用してこれらのパラメーターを含み、オブジェクトを関数に渡し、オブジェクトのプロパティを処理することです。
var prop = {a:55、b: 'ss'、c:function(){...} d:{x:1、y:2} ...} foo(prop);このようにして、関数を使用するときにパラメーターの順序を覚える必要はありません。パラメーターオブジェクトのいくつかの属性名を覚えておいてください。これは間違いを犯すのは簡単ではありません
参照: 「JavaScriptパターン」「JavaScriptのデザインパターンと開発の実践」
上記はこの記事のすべての内容です。みんなの学習に役立つことを願っています。誰もがwulin.comをもっとサポートすることを願っています。