2016-04-01 48 views
0

從publicMethod調用privateMethod的方式是什麼? 我們不能只在public方法中定義privateMethod的內容,並且做同樣的事情嗎?在公共函數中調用私有函數的基本用途是什麼?

var basketModule = (function() { 

     var basket = []; 

    function privateMethod() { 
     console.log(basket); 
    } 

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

})()); 
basketModule.publicMethod(); 
+2

如果你在public方法中定義它,那麼你每次都重新創建私有方法。 – elclanrs

+1

你擁有的例子是有意思的。如果你要寫的東西完全一樣,那麼是的,沒有理由擁有私人功能。但通常你有執行其他外界不應該關心的工作的私人功能。 –

+0

當你想做一些屬性更新任務可能是; – itzmukeshy7

回答

2

在您簡單的例子,沒有真正的privateMethod存在,因爲所有publicMethod所做的就是調用它的理由,但在一個更真實世界的例子,私有方法會做的事情,你不希望其他模塊自己調用。

例如,這是一個代碼片段,我對今天的工作,降低使它成爲一個很好的例子:

(function(){ 

    function _renderTreeLevel() { ... } 

    function _backfillAllSelectedStates() { ... } 

    function _updateSelectedCount() { ... } 

    return { 
    render: function() { 
     var expandCollapse = new ExpandCollapse(); 
     expandCollapse.render(); 

     _renderTreeLevel(0, this.ui.treeRegion, this.treeData); 
     _backfillAllSelectedStates(); 
     _updateSelectedCount((this.options.selected || []).length); 

     $('.collapse').collapse(); 
    } 
}; 

})(); 

3「私人」功能與「_」開始只是函數我將代碼放入重構中,使代碼變得更清潔,更可重用。它們不是我希望有人能夠打電話的功能。

該模塊的用戶只能撥打render()

推理與其他任何具有內置公共和私有成員(如C#或Java)的語言相同,但由於JavaScript沒有提供該概念,因此這是人們遵循的用於提供類似行爲的模式。

相關問題