美文网首页
js组件化开发

js组件化开发

作者: GQ1994 | 来源:发表于2016-12-04 11:56 被阅读0次

如果不了解js的继承的写法,可以先去看看我之前写的js的子类继承父类文章
http://www.jianshu.com/p/61b17c62c9fa

js的继承在写好后,我们会发现构造器传参,当参数多的情况下会出现,参数先后问题,和参数数量不对应的问题,而且直接js会报错

  • 要解决这个问题其实很简单,首先传参的先后顺序只需要一个是不是就解决问题了?可是要传很多东西呢,又要放在一个变量里,对,就是json,将变量放在一个json对象中。再来就是参数个数问题,当在调用的时候,传过来的参叫配置参数,我们可以在父类里预先设定好默认参数,在配置参数来了之后将其复制给默认参数,没有的参数将会使用默认的,有的用配置参数就搞定了参数个数问题了。

  • 下面直接上demo(对之前做的div拖动进行组件化的加工)

      <!DOCTYPE HTML>
      <html>
      <head>
          <meta http-equiv="Content-Type" content="text/html; charset=utf-8">
          <title>无标题文档</title>
          <style>
              #div1 {
                  width: 100px;
                  height: 100px;
                  background: red;
                  position: absolute;
              }
      
              #div2 {
                  width: 100px;
                  height: 100px;
                  background: yellow;
                  position: absolute;
                  left: 100px;
              }
      
              #div3 {
                  width: 100px;
                  height: 100px;
                  background: blue;
                  position: absolute;
                  left: 200px;
              }
      
              #div4 {
                  width: 100px;
                  height: 100px;
                  background: green;
                  position: absolute;
                  left: 300px;
              }
          </style>
          <script>
      
              //组件开发 : 多组对象,像兄弟之间的关系( 代码复用的一种形式 )
      
              window.onload = function () {
      
                  var d1 = new Drag();
                  d1.init({    //配置参数
                      id: 'div1'
                  });
      
                  var d2 = new Drag();
                  d2.init({   //配置参数
                      id: 'div2',
                      toDown: function () {
                          document.title = 'hello';
                          document.body.style.background = 'black';
                      }
                  });
      
                  var d3 = new Drag();
                  d3.init({    //配置参数
                      id: 'div3',
                      toDown: function () {
                          document.title = '妙味';
                      },
                      toUp: function () {
                          document.title = '课堂';
                      }
                  });
      
                  var d4 = new Drag();
                  d4.init({    //配置参数
                      id: 'div4',
                      toUp: function () {
                          document.title = 'beybye';
                      }
                  });
      
              };
      
              function Drag() {
                  this.obj = null;
                  this.disX = 0;
                  this.disY = 0;
      
                  this.settings = {   //默认参数
                      toDown: function () {
                      },
                      toUp: function () {
                      }
                  };
      
              }
              Drag.prototype.init = function (opt) {
      
                  var This = this;
      
                  this.obj = document.getElementById(opt.id);
      
                  extend(this.settings, opt);
      
                  this.obj.onmousedown = function (ev) {
                      var ev = ev || window.event;
                      This.fnDown(ev);
      
                      This.settings.toDown();
      
                      document.onmousemove = function (ev) {
                          var ev = ev || window.event;
                          This.fnMove(ev);
                      };
                      document.onmouseup = function () {
                          This.fnUp();
      
                          This.settings.toUp();
      
                      };
                      return false;
                  };
      
              };
      
              Drag.prototype.fnDown = function (ev) {
                  this.disX = ev.clientX - this.obj.offsetLeft;
                  this.disY = ev.clientY - this.obj.offsetTop;
              };
              Drag.prototype.fnMove = function (ev) {
                  this.obj.style.left = ev.clientX - this.disX + 'px';
                  this.obj.style.top = ev.clientY - this.disY + 'px';
              };
              Drag.prototype.fnUp = function () {
                  document.onmousemove = null;
                  document.onmouseup = null;
              };
      
              function extend(obj1, obj2) {
                  for (var attr in obj2) {
                      obj1[attr] = obj2[attr];
                  }
              }
          </script>
      </head>
      
      <body>
      <div id="div1"></div>
      <div id="div2"></div>
      <div id="div3"></div>
      <div id="div4"></div>
      </body>
      </html>
    

如果是一个人开发,这个组件化开发的形式基本够用

但是为了后期易于维护,更有利于团队开发,要使用将类里面的配置参数,方法,事件进行分离,编写自定义事件进行开发,后续自定义事件开发我也会写相关文档

可以先看看这个demo(基于之前的div拖动事件修改的自定义事件):
http://www.jianshu.com/p/4f2a951cb41a

相关文章

  • Vue1实战学习一

    学习目标 掌握Vue.js在实战中的运用 学会使用Vue.js完整的开发移动端APP 学会工程化、组件化、模块化开...

  • webpack基础笔记

    webpack基础 1.前端工程化 实际的前端开发: 模块化:(js的模块化,css的模块化,资源的模块化) 组件...

  • WEB端HTML规范及模板

    我们会从以下几个方面进行规范化: 点:html标签、css属性、js语法 线:由HTML+css+js 开发的组件...

  • vue学习笔记

    初始化组件 1.流程图 2.组件初始化 vue.js instance/init.js instance/scop...

  • react脚本架工具

    前端使用React.js+webpack进行组件化开发越来流行了.想使用react.js进行组件化开发,但又不想学...

  • Vue.js仿eleme项目(1)

    一,学习背景及介绍 目标掌握Vue.js在实战中的运用,学会使用Vue.js完整地开发移动端APP学会组件化、模块...

  • 组件化,mvvm,循环引用原理,js交互

  • 06Vue.js快速入门-Vue组件化开发

    组件其实就是一个拥有样式、动画、js逻辑、HTML结构的综合块。前端组件化确实让大的前端团队更高效的开发前端项目。...

  • Android组件化和插件化开发

    Android组件化和插件化开发 什么是组件化和插件化? 组件化开发 就是将一个app分成多个模块,每个模块都是一...

  • vue react 区别

    核心思想都是推崇组件化的开发理念 vue还是很 划分出 html(结构) css(表现) js(行为)的形式t...

网友评论

      本文标题: js组件化开发

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