模塊化的演變

全局函數(shù)的方式

在html中要實(shí)現(xiàn)加減的運(yùn)算

<body>
  <input type="text" id="txt_a">
  <select id="sel_op">
    <option value="+">+</option>
    <option value="-">-</option>
  </select>
  <input type="text" id="txt_b">
  <input type="button" id="btn" value=" = ">
  <input type="text" id="txt_res">
  <!-- 需要實(shí)現(xiàn)計(jì)算的功能,于是乎抽象了一個(gè)計(jì)算的模塊 -->
</body>

在header中實(shí)現(xiàn)加減function,將重復(fù)使用的代碼封裝到函數(shù)中。

  <script>
    // 實(shí)現(xiàn)加減function
    function add(a, b) {
      return parseFloat(a) + parseFloat(b);
    }
    function subtract(a, b) {
      return parseFloat(a) - parseFloat(b);
    }
    // 早期的開發(fā)過程中就是將重復(fù)使用的代碼封裝到函數(shù)中
    // 再將一系列的函數(shù)放到一個(gè)文件中,稱之為模塊
    // 約定的形式定義的模塊,存在命名沖突,可維護(hù)性也不高的問題
    // 僅僅從代碼角度來(lái)說(shuō):沒有任何模塊的概念
    window.onload = function() {
      var ta = document.getElementById('txt_a');
      var tb = document.getElementById('txt_b');
      var tres = document.getElementById('txt_res');
      var btn = document.getElementById('btn');
      var op = document.getElementById('sel_op');
      btn.onclick = function() {
        switch (op.value) {
          case '+':
            tres.value = add(ta.value, tb.value);
            break;
          case '-':
            tres.value = subtract(ta.value, tb.value);
            break;
        }
      };
    };
  </script>

封裝對(duì)象的方式

首先建立math對(duì)象,對(duì)于加減操作都放在calculator對(duì)象中,在calculator對(duì)象中添加具體方法,缺點(diǎn)是沒有私有空間。

    var math = {};
    math.calculator = {};
    math.calculator.add = function(a, b) {
      return a + b;
    };

私有空間劃分

建立自執(zhí)行函數(shù),返回相應(yīng)的方法,函數(shù)有了私有空間可以定義私有變量及方法

<script>
    // 計(jì)算模塊
    var calculator = (function() {
      // 這里形成一個(gè)單獨(dú)的私有的空間var name = '';
      // convert函數(shù)為私有的轉(zhuǎn)換邏輯
      function convert(input){
        return parseInt(input);
      }
      // 加減函數(shù)為暴露給外部的邏輯
      function add(a, b) {
        return convert(a) + convert(b);
      }
      function subtract(a, b) {
        return convert(a) - convert(b);
      }
      // 返回
      return {
        add: add,
        subtract: subtract,
      }
    })();

封裝函數(shù)的方式

建立自執(zhí)行函數(shù),傳入?yún)?shù)為window.calculator或空對(duì)象,首先實(shí)現(xiàn)add方法,新增需求時(shí),傳入calculator對(duì)象,會(huì)添加remain方法

    (function(calculator) {
      function convert(input) {
        return parseInt(input);
      }
      calculator.add = function(a, b) {
        return convert(a) + convert(b);
      }
      window.calculator = calculator;
    })(window.calculator || {});

    // 新增需求
    (function(calculator) {
      function convert(input) {
        return parseInt(input);
      }
      // calculator 如果存在的話,就是擴(kuò)展,不存在就是新加
      calculator.remain = function(a, b) {
        return convert(a) % convert(b);
      }
      window.calculator = calculator;
    })(window.calculator || {});
    // 開閉原則,對(duì)新增開放,對(duì)修改關(guān)閉;

第三方依賴

對(duì)于第三方的依賴,作為參數(shù)傳入,如下面第一種方式,需要引入jquery,第二中方式j(luò)query直接作為參數(shù)傳入

    (function(calculator) {
      // 對(duì)全局產(chǎn)生依賴,不能這樣用
      //console.log($);
      function convert(input) {
        return parseInt(input);
      }
      calculator.add = function(a, b) {
        return convert(a) + convert(b);
      }

      window.calculator = calculator;

    })(window.calculator || {});

    // 新增需求
    // calc_v2016.js
    (function(calculator, $) {
      // 依賴函數(shù)的參數(shù),是屬于模塊內(nèi)部
      console.log($);
      function convert(input) {
        return parseInt(input);
      }
      // calculator 如果存在的話,我就是擴(kuò)展,不存在我就是新加
      calculator.remain = function(a, b) {
        return convert(a) % convert(b);
      }
      window.calculator = calculator;
    })(window.calculator || {}, jQuery);
最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡(jiǎn)書系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。

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

  • 函數(shù)和對(duì)象 1、函數(shù) 1.1 函數(shù)概述 函數(shù)對(duì)于任何一門語(yǔ)言來(lái)說(shuō)都是核心的概念。通過函數(shù)可以封裝任意多條語(yǔ)句,而且...
    道無(wú)虛閱讀 4,657評(píng)論 0 5
  • 在線閱讀 http://interview.poetries.top[http://interview.poetr...
    前端進(jìn)階之旅閱讀 114,796評(píng)論 24 450
  • 1.JQuery 基礎(chǔ) 改變web開發(fā)人員創(chuàng)造搞交互性界面的方式。設(shè)計(jì)者無(wú)需花費(fèi)時(shí)間糾纏JS復(fù)雜的高級(jí)特性。 1....
    LaBaby_閱讀 1,367評(píng)論 0 2
  • 1.JQuery 基礎(chǔ) 改變web開發(fā)人員創(chuàng)造搞交互性界面的方式。設(shè)計(jì)者無(wú)需花費(fèi)時(shí)間糾纏JS復(fù)雜的高級(jí)特性。 1....
    LaBaby_閱讀 1,200評(píng)論 0 1
  • 致敬,2016年的自己。 3月1號(hào)離家,從北到南,拜訪好友,隨心定于上海,開始了一個(gè)人的工作和生活。 一路向南! ...
    Diki范范閱讀 505評(píng)論 0 0