js组件化开发

如果不了解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

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 213,558评论 6 492
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 91,002评论 3 387
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 159,036评论 0 349
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 57,024评论 1 285
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 66,144评论 6 385
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 50,255评论 1 292
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 39,295评论 3 412
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 38,068评论 0 268
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 44,478评论 1 305
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 36,789评论 2 327
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 38,965评论 1 341
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 34,649评论 4 336
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 40,267评论 3 318
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 30,982评论 0 21
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 32,223评论 1 267
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 46,800评论 2 365
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 43,847评论 2 351

推荐阅读更多精彩内容

  • 1. tab列表折叠效果 html: 能源系统事业部 岗位名称: 工作地点 岗位名...
    lilyping阅读 1,849评论 0 1
  • jQuery基础 什么是JQ?一个优秀的JS库,大型开发必备JQ的好处?一简化JS的复杂操作二不再需要关心兼容性三...
    幺七阅读 942评论 0 2
  • 什么是模块化开发? 前端开发中,起初只要在script标签中嵌入几十上百行代码就能实现一些基本的交互效果,后来js...
    半世韶华忆阑珊阅读 652评论 0 0
  • 什么是Vue.js Vue.js 是一套构建用户界面的 渐进式框架。它非常容易与其它库或已有项目整合,而无须从头开...
    北极狐狸阅读 6,645评论 0 50
  • 这两款遥控器你喜欢哪儿呢?如果有不分主次的多个选项,通常会出现「分析瘫痪」,因此我们往往需要在产品上作“减法”。席...
    榆木石头阅读 1,460评论 0 1