在线观看不卡亚洲电影_亚洲妓女99综合网_91青青青亚洲娱乐在线观看_日韩无码高清综合久久

鍍金池/ 教程/ HTML/ 暴露模塊模式
中介者模式
MVVM
亨元模式
設(shè)計(jì)模式分類概覽表
ES Harmony
組合模式
CommonJS
jQuery 插件的設(shè)計(jì)模式
外觀模式
觀察者模式
建造者模式
構(gòu)造器模式
外觀模式
簡(jiǎn)介
AMD
原型模式
設(shè)計(jì)模式的分類
觀察者模式
命名空間模式
代理模式
編寫設(shè)計(jì)模式
適配器模式
反模式
什么是設(shè)計(jì)模式
模塊化模式
MVC
Mixin 模式
裝飾模式
設(shè)計(jì)模式的結(jié)構(gòu)
單例模式
迭代器模式
命令模式
工廠模式
MVP
暴露模塊模式
惰性初始模式

暴露模塊模式

既然我們對(duì)模塊模式已經(jīng)有一些了解了,讓我們看一下改進(jìn)版本 - Christian Heilmann 的啟發(fā)式模塊模式。 啟發(fā)式模塊模式來(lái)自于,當(dāng)Heilmann對(duì)這樣一個(gè)現(xiàn)狀的不滿,即當(dāng)我們想要在一個(gè)公有方法中調(diào)用另外一個(gè)公有方法,或者訪問(wèn)公有變量的時(shí)候,我們不得不重復(fù)主對(duì)象的名稱。他也不喜歡模塊模式中,當(dāng)想要將某個(gè)成員變成公共成員時(shí),修改文字標(biāo)記的做法。

因此他工作的結(jié)果就是一個(gè)更新的模式,在這個(gè)模式中,我們可以簡(jiǎn)單地在私有域中定義我們所有的函數(shù)和變量,并且返回一個(gè)匿名對(duì)象,這個(gè)對(duì)象包含有一些指針,這些指針指向我們想要暴露出來(lái)的私有成員,使這些私有成員公有化。

下面給出一個(gè)如何使用暴露式模塊模式的例子:

var myRevealingModule = function () {

        var privateVar = "Ben Cherry",
            publicVar  = "Hey there!";

        function privateFunction() {
            console.log( "Name:" + privateVar );
        }

        function publicSetName( strName ) {
            privateVar = strName;
        }

        function publicGetName() {
            privateFunction();
        }

        // Reveal public pointers to 
        // private functions and properties

        return {
            setName: publicSetName,
            greeting: publicVar,
            getName: publicGetName
        };

    }();

myRevealingModule.setName( "Paul Kinlan" );

這個(gè)模式可以用于將私有函數(shù)和屬性以更加規(guī)范的命名方式展現(xiàn)出來(lái)。


var myRevealingModule = function () {

        var privateCounter = 0;

        function privateFunction() {
            privateCounter++;
        }

        function publicFunction() {
            publicIncrement();
        }

        function publicIncrement() {
            privateFunction();
        }

        function publicGetCount(){
          return privateCounter;
        }

        // Reveal public pointers to
        // private functions and properties       

       return {
            start: publicFunction,
            increment: publicIncrement,
            count: publicGetCount
        };

    }();

myRevealingModule.start();

優(yōu)勢(shì)

這個(gè)模式是我們腳本的語(yǔ)法更加一致。同樣在模塊的最后關(guān)于那些函數(shù)和變量可以被公共訪問(wèn)也變得更加清晰,增強(qiáng)了可讀性。

缺點(diǎn)

這個(gè)模式的一個(gè)缺點(diǎn)是如果私有函數(shù)需要使用公有函數(shù),那么這個(gè)公有函數(shù)在需要打補(bǔ)丁的時(shí)候就不能被重載。因?yàn)樗接泻瘮?shù)仍然使用的是私有的實(shí)現(xiàn),并且這個(gè)模式不能用于公有成員,只用于函數(shù)。

公有成員使用私有成員也遵循上面不能打補(bǔ)丁的規(guī)則。

因?yàn)樯厦娴脑?,使用暴露式模塊模式創(chuàng)建的模塊相對(duì)于原始的模塊模式更容易出問(wèn)題,因此在使用的時(shí)候需要小心。