JavaScript 暴露模塊模式

2018-08-02 16:25 更新

暴露模塊模式

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

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

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

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" );

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

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)勢

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

缺點

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

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

因為上面的原因,使用暴露式模塊模式創(chuàng)建的模塊相對于原始的模塊模式更容易出問題,因此在使用的時候需要小心。

以上內(nèi)容是否對您有幫助:
在線筆記
App下載
App下載

掃描二維碼

下載編程獅App

公眾號
微信公眾號

編程獅公眾號