美文网首页深入解读JavaScript
用AOP装饰函数,实现插件式表单验证

用AOP装饰函数,实现插件式表单验证

作者: 悟C | 来源:发表于2018-09-25 23:38 被阅读1次

    之前用策略模式实现了表单的验证,现在学习了装饰模式发现实现表单验证更简洁,意图和目的更明确。

    下面来看一下,装饰函数实现的插件式表单验证:

    <body>
      <input type="text" id="username">
      <button id="submitBtn">按钮</button>
      <script>
        var submitBtn = document.getElementById('submitBtn');
        var username = document.getElementById('username');
    
        Function.prototype.before = function(beforefn) {
          var __self = this;
          return function() {
            if (beforefn.apply(this, arguments) === false) {
              return;
            }
            return __self.apply(this, arguments);
          }
        }
    
        var validata = function() {
          if (username.value === '') {
            alert('username不能为空')
            return false;
          }
        }
    
        var formSubmit = function() {
          var param = {
            username: username.value
          };
          console.log('进行ajax请求', param);
        }
    
        formSubmit = formSubmit.before(validata);
    
        submitBtn.onclick = function() {
          formSubmit();
        }
      </script>
    </body>
    

    通过实现一个before,让formSubmit运行之前先运行beforefn。如果beforefn返回false,就不执行formSubmit函数。

    通过before我们就可以很好的分离提交ajax请求和数据验证,让彼此的职责更明确。

    不过要注意:这种装饰方式也叠加了函数的作用域,如果装饰的链条过长,性能上会受一点影响。

    相关文章

      网友评论

        本文标题:用AOP装饰函数,实现插件式表单验证

        本文链接:https://www.haomeiwen.com/subject/zcmroftx.html