面向对象编程

OOPObject-oriented programming
理解 一种编程方法
原理 利用Prototype属性的可继承性实现

应用
tab组件

  ▼ 面向过程---------------------------------------------------------
  $('.tab').on('click',function(){
       var tab = $(this) ;
       var i = $(this).index();

       tab.siblings().removeClass('active');
       tab.addClass('active');

       tab.parents('.item').find('.panel-box').removeClass('active');
       tab.parents('.item').find('.panel-box').eq(i).addClass('active');  
  });

  ▼ 面向对象---------------------------------------------------------
  function Tab(ct){                                 // 构造函数Tab
    this.ct = ct;
    this.init();
    this.bind();
  }
  Tab.prototype.init = function(){                 // 初始化函数
    this.$tab = this.ct.find('.tab');
  };
  Tab.prototype.bind = function(){                 // 绑定事件 

    this.$tab.on('click',function(){
      var tab = $(this) ;
      var i = $(this).index();

      tab.siblings().removeClass('active');
      tab.addClass('active');

      tab.parents('.item').find('.panel-box').removeClass('active');
      tab.parents('.item').find('.panel-box').eq(i).addClass('active');
     });
   };

  new Tab($('.item').eq(0));        
  new Tab($('.item').eq(1));

 过程: 1 将面向过程的各部分功能划分清晰
       2 绑定在构造函数上
       3 绑定在新增加的this上

 问题: 每个新组件都要执行new命令来绑定this,才会生效。如何一次使所有组件生效?   


 ▼ 优化封装---------------------------------------------------------

 举例: var newTab1 = {
                init:function(){ ...... };
        }
        newTab1.init($('.item'));

 思路: 1 以构造函数的方式,将方法绑定在对象上,只是封装方法
        ► 优点:
                把方法作为对象的属性来绑定,防止全局变量的污染;
                提高代码复用性,扩展性,节省内存;
        ► 缺点:
                对象可获得,可操控,有泄露风险;
        2 需要进一步优化,隐藏方法和变量 => 封装对象

 优化: var newTab2 = (function(){
                return{
                     init:function(ct){ 
                        ct.each(function(index,node){
                            new Tab($(node));
                        }) ;
                      }
                }
        })()
        newTab2.init($('.item'));

 分析: 1 newTab1是一个对象,所有方法只能以属性方式添加
        2 newTab2是一个立即执行函数,结果由return返回,
          方法可以属性方式添加,也可在return内添加 => 隐藏方法和局部变量

同理 menu组件 & crousel组件

►曝光组件Exppsure lazyLoad-Demo

  功能:当一个元素出现在可视范围时,再让此元素做出某种效果
  函数--------------------------------------------------------
  function Exposure ($target,callback){ //参数:元素,回调函数
     this.$target = $target;
     this.init();
     this.bind();
     this.check($node);
   } 
   
  Exposure.prototype.bind = function(){     //给元素绑定滚动事件
    var _this = this;
    $(window).on('scroll',function(){
      _this.check();
    })
  }
  Exposure.prototype.check = function(){    //检查到元素出现,就执行回调函数
    if(this.isShow(this.$target)){
      this.callback(this.$target)
    }
  }   
  Exposure.prototype.isShow = function($node){   //判断元素是否出现
     var scrollH = $(window).scrollTop(),
       winH = $(window).height(),
       top = $node.offset().top,
     if(top < winH + scrollH){
         return true;
     }else{
      return false;
     }
  };
  封装------------------------------------------------------------- 
  var Lazy = (function(){
      return{
          init:function(){...};       // 初始化
          once:function(){...};
      }
  })();
  Lazy.one($('.always'), function($node){   // 调用组件,让不同元素出现相应效果
    $node.text( $node.text() + 'and again');
  });
  Lazy.init($('.container img'), function($img){
    $img.attr('src', $img.attr('data-src'));
  });

  分析:1 用构造函数做出一个公用的曝光功能组件
        2 留出多个接口供不同效果的元素使用(曝光加载图片,曝光加载文字...)

同理 Date组件 & 弹窗组件

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

推荐阅读更多精彩内容