2015-07-05 44 views
0

我只是在尋找在模塊化模式的簡單示範代碼,看看:瞭解一個基本的模塊化模式的私人和公共職能

// Global module 
var myModule = (function (jQ, _) { 

    function privateMethod1(){ 
     jQ(".container").html("test"); 
    } 

    function privateMethod2(){ 
     console.log(_.min([10, 5, 100, 2, 1000])); 
    } 

    return{ 
     publicMethod: function(){ 
      privateMethod1(); 
     } 
    }; 

// Pull in jQuery and Underscore 
})(jQuery, _); 

myModule.publicMethod(); 

的代碼是非常簡單的,我不明白是什麼需要publicMethod?爲什麼privateMethod1privateMethod2無法訪問?據我所知,privateMethod1privateMethod2是經典的js函數,而publicMethod更多是指定用於保存函數的變量。

+0

'publicMethod'是一種可從外部訪問的方法。如果您不需要它,請將其移除。 – Oriol

+0

'privateMethod1'出現在'publicMethod'的「accessible」處,雖然沒有出現可以使用現有的'js'改變嗎? _「我不明白的是publicMethod的需求是什麼?」_' publicMethod'似乎稱爲'privateMethod1'? – guest271314

+0

爲什麼privateMethod1和privateMethod2無法訪問?那是我的問題。 –

回答

2

privateMethod1()privateMethod2()是在模塊函數包裝中聲明的本地函數。因此,它們只能在該函數包裝中可見和可調用。它們不能從模塊包裝外部到達。

這與函數內部的局部變量相同。當你想創建一個公共方法可以使用函數或方法

function someFunc() { 
    // a function declared inside another function is ONLY available 
    // inside that function 
    function localFunc() { 
     // do something 
    } 

    // this is just like a local variable which is only available within 
    // the scope of the function itself 
    var myVariable = 2; 
} 

// can't call localFunc here - this will be an error 
// because it is defined in a different scope and not available here 
localFunc(); 

私有方法是有用的,但你不希望外部用戶能夠同時撥打電話或使用這些函數/方法。

私有變量可用於存儲公共方法或私有方法想要引用的狀態,但您不希望外部調用方訪問或能夠混淆。