Javascript中的Module(模塊)模式

JavaScript模塊是用于保持代碼塊之間相互獨(dú)立而普遍使用的設(shè)計(jì)模式。對(duì)于熟悉面向?qū)ο笳Z(yǔ)言的人來(lái)說(shuō),模塊是JavaScript的"類(lèi)"。在JavaScript中Module模式模擬了類(lèi)的概念,用閉包封裝了"私有"狀態(tài)和方法。

我們用立即執(zhí)行函數(shù)(Immediately-Invoked-Function-Expressions (IIFE)) 創(chuàng)建私有空間,防止其泄露全局作用域。其樣子如下:

var myGirlfriend = (function() {

  // 定義私有變量或方法
  var name = '小鄭';

  var _kiss = function() {
    console.log('吻');
  }

  var _smile = function() {
    console.log('微笑');
  }

  return {
    // 暴露給公有的變量或方法
    simle: _smile,
    name: name
  }

})();

console.log(myGirlfriend.name); 
myGirlfriend.simle();

console.log(myGirlfriend._simle);
console.log(myGirlfriend._kiss);

/**
 * 結(jié)果:
 *     小美
 *     微笑
 *     undefined
 *     undefined
*/

在Module模式內(nèi),由于閉包的存在,聲明的變量和方法只在模式內(nèi)部可用,但在返回的對(duì)象上定義的變量和方法,在對(duì)外部也可用。如上面例子:其他人可以知道我的女朋友的名字,也可以看到我女朋友微笑,但不可以吻我女朋友。

Module模式的優(yōu)缺點(diǎn):

優(yōu)點(diǎn):

  • 實(shí)現(xiàn)代碼的封裝模塊化
  • 實(shí)現(xiàn)私有化變量和方法

缺點(diǎn):

  • 無(wú)法應(yīng)用私有變量,造成無(wú)法對(duì)私有變量進(jìn)行單元測(cè)試
  • 當(dāng)我們想改可見(jiàn)性時(shí),實(shí)際上要修改每一個(gè)曾經(jīng)使用過(guò)該成員的地方。

這里只舉例了一種簡(jiǎn)單Module的設(shè)計(jì)模式,從Module模式上還衍生出Revealing Module(揭示模塊)模式、Singleton(單例)模式。這些模式都很有使用價(jià)值,不同當(dāng)我們的系統(tǒng)中出現(xiàn)了它們,則表示我們能需要評(píng)估我們的設(shè)計(jì),例如Singleton的存在往往表明系統(tǒng)中的模塊要么是系統(tǒng)緊密耦合,要么是其邏輯過(guò)于分散在代碼庫(kù)的多個(gè)部分中。

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請(qǐng)結(jié)合常識(shí)與多方信息審慎甄別。
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡(jiǎn)書(shū)系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

友情鏈接更多精彩內(nèi)容