面向?qū)ο缶幊?/h1>

OOPObject-oriented programming
理解 一種編程方法
原理 利用Prototype屬性的可繼承性實(shí)現(xiàn)

應(yīng)用
? 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');  
  });

  ▼ 面向?qū)ο?--------------------------------------------------------
  function Tab(ct){                                 // 構(gòu)造函數(shù)Tab
    this.ct = ct;
    this.init();
    this.bind();
  }
  Tab.prototype.init = function(){                 // 初始化函數(shù)
    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 綁定在構(gòu)造函數(shù)上
       3 綁定在新增加的this上

 問題: 每個新組件都要執(zhí)行new命令來綁定this,才會生效敌蚜。如何一次使所有組件生效?   


 ▼ 優(yōu)化封裝---------------------------------------------------------

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

 思路: 1 以構(gòu)造函數(shù)的方式,將方法綁定在對象上,只是封裝方法
        ? 優(yōu)點(diǎn):
                把方法作為對象的屬性來綁定兰英,防止全局變量的污染玷坠;
                提高代碼復(fù)用性蜗搔,擴(kuò)展性,節(jié)省內(nèi)存八堡;
        ? 缺點(diǎn):
                對象可獲得樟凄,可操控,有泄露風(fēng)險兄渺;
        2 需要進(jìn)一步優(yōu)化缝龄,隱藏方法和變量 => 封裝對象

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

 分析: 1 newTab1是一個對象,所有方法只能以屬性方式添加
        2 newTab2是一個立即執(zhí)行函數(shù)挂谍,結(jié)果由return返回叔壤,
          方法可以屬性方式添加,也可在return內(nèi)添加 => 隱藏方法和局部變量

同理 menu組件 & crousel組件

?曝光組件Exppsure lazyLoad-Demo

  功能:當(dāng)一個元素出現(xiàn)在可視范圍時凳兵,再讓此元素做出某種效果
  函數(shù)--------------------------------------------------------
  function Exposure ($target,callback){ //參數(shù):元素百新,回調(diào)函數(shù)
     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(){    //檢查到元素出現(xiàn),就執(zhí)行回調(diào)函數(shù)
    if(this.isShow(this.$target)){
      this.callback(this.$target)
    }
  }   
  Exposure.prototype.isShow = function($node){   //判斷元素是否出現(xiàn)
     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){   // 調(diào)用組件庐扫,讓不同元素出現(xiàn)相應(yīng)效果
    $node.text( $node.text() + 'and again');
  });
  Lazy.init($('.container img'), function($img){
    $img.attr('src', $img.attr('data-src'));
  });

  分析:1 用構(gòu)造函數(shù)做出一個公用的曝光功能組件
        2 留出多個接口供不同效果的元素使用(曝光加載圖片饭望,曝光加載文字...)

同理 Date組件 & 彈窗組件

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者

  • 序言:七十年代末仗哨,一起剝皮案震驚了整個濱河市,隨后出現(xiàn)的幾起案子铅辞,更是在濱河造成了極大的恐慌厌漂,老刑警劉巖,帶你破解...
    沈念sama閱讀 216,372評論 6 498
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件斟珊,死亡現(xiàn)場離奇詭異苇倡,居然都是意外死亡,警方通過查閱死者的電腦和手機(jī)囤踩,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 92,368評論 3 392
  • 文/潘曉璐 我一進(jìn)店門旨椒,熙熙樓的掌柜王于貴愁眉苦臉地迎上來,“玉大人堵漱,你說我怎么就攤上這事综慎∪藜” “怎么了嘹叫?”我有些...
    開封第一講書人閱讀 162,415評論 0 353
  • 文/不壞的土叔 我叫張陵磕潮,是天一觀的道長俭缓。 經(jīng)常有香客問我,道長蹦肴,這世上最難降的妖魔是什么髓窜? 我笑而不...
    開封第一講書人閱讀 58,157評論 1 292
  • 正文 為了忘掉前任相满,我火速辦了婚禮丈探,結(jié)果婚禮上录择,老公的妹妹穿的比我還像新娘。我一直安慰自己碗降,他們只是感情好糊肠,可當(dāng)我...
    茶點(diǎn)故事閱讀 67,171評論 6 388
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著遗锣,像睡著了一般。 火紅的嫁衣襯著肌膚如雪嗤形。 梳的紋絲不亂的頭發(fā)上精偿,一...
    開封第一講書人閱讀 51,125評論 1 297
  • 那天,我揣著相機(jī)與錄音赋兵,去河邊找鬼笔咽。 笑死,一個胖子當(dāng)著我的面吹牛霹期,可吹牛的內(nèi)容都是我干的叶组。 我是一名探鬼主播,決...
    沈念sama閱讀 40,028評論 3 417
  • 文/蒼蘭香墨 我猛地睜開眼历造,長吁一口氣:“原來是場噩夢啊……” “哼甩十!你這毒婦竟也來了船庇?” 一聲冷哼從身側(cè)響起,我...
    開封第一講書人閱讀 38,887評論 0 274
  • 序言:老撾萬榮一對情侶失蹤侣监,失蹤者是張志新(化名)和其女友劉穎鸭轮,沒想到半個月后,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體橄霉,經(jīng)...
    沈念sama閱讀 45,310評論 1 310
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡窃爷,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 37,533評論 2 332
  • 正文 我和宋清朗相戀三年,在試婚紗的時候發(fā)現(xiàn)自己被綠了姓蜂。 大學(xué)時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片按厘。...
    茶點(diǎn)故事閱讀 39,690評論 1 348
  • 序言:一個原本活蹦亂跳的男人離奇死亡,死狀恐怖钱慢,靈堂內(nèi)的尸體忽然破棺而出逮京,到底是詐尸還是另有隱情,我是刑警寧澤滩字,帶...
    沈念sama閱讀 35,411評論 5 343
  • 正文 年R本政府宣布造虏,位于F島的核電站,受9級特大地震影響麦箍,放射性物質(zhì)發(fā)生泄漏漓藕。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 41,004評論 3 325
  • 文/蒙蒙 一挟裂、第九天 我趴在偏房一處隱蔽的房頂上張望享钞。 院中可真熱鬧,春花似錦诀蓉、人聲如沸栗竖。這莊子的主人今日做“春日...
    開封第一講書人閱讀 31,659評論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽狐肢。三九已至,卻和暖如春沥曹,著一層夾襖步出監(jiān)牢的瞬間份名,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 32,812評論 1 268
  • 我被黑心中介騙來泰國打工妓美, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留僵腺,地道東北人。 一個月前我還...
    沈念sama閱讀 47,693評論 2 368
  • 正文 我出身青樓壶栋,卻偏偏與公主長得像辰如,于是被迫代替她去往敵國和親。 傳聞我的和親對象是個殘疾皇子贵试,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 44,577評論 2 353

推薦閱讀更多精彩內(nèi)容