// 定义策略var strategy = { isNotEmpty: function(value, errorMsg){ if(value === ''){ return errorMsg; } }, minLength: function(value, length, errorMsg){ if(value.length < length){ return errorMsg; } }, mobileFormat: function(value, errorMsg){ if(!/(^1[3|5|8][0-9]{9}$)/.test(value)){ return errorMsg; } } }function Validator() { this.cache = []; } Validator.prototype.add = function(value, rules){ for(var i = 0, rule; rule = rules[i++];){ var self = this; (function(rule){ self.cache.push(function(){ var strategyRule = rule.strategy.split(':'); var strategyName = strategyRule.shift(); // 各位看官注意啦, 如果直接使用[value].concat(strategyRule.push(rule.errorMsg))会出问题 // 什么问题呢? // strategyRule.push(rule.errorMsg)这货会返回length, 我TM调试了半天! strategyRule.push(rule.errorMsg); var arr = [value].concat(strategyRule); return strategy[strategyName].apply(null,arr); }) })(rule); } } Validator.prototype.check = function(){ for(var i = 0, checkFn; checkFn = this.cache[i++];){ var msg = checkFn(); if(msg){ return msg; } } }var validator = new Validator(); validator.add('12345', [ { strategy: 'isNotEmpty', errorMsg: 'in not empty' }, { strategy: 'minLength:10', errorMsg: 'length is less than 10' } ]);var tip = validator.check(); // tip: length is less than 10
Das obige ist der detaillierte Inhalt vonÜberprüfen Sie die Implementierung des Strategiemusters. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!