2014-02-09 88 views
0

當我做一個封閉由Douglas Crockford的函數的所有實例是否可以訪問相同的私有變量?

function Container(param) { 
    function dec(){ 
    if (secret > 0) { 
     secret -= 1; 
     return true; 
    } else { 
     return false; 
    } 
    } 
    var secret = 3; 
    this.service = function(){ 
    if(dec()){ 
     return param; 
    } else { 
     return null; 
    } 
    }; 
} 

有私有成員就像這個例子的Container每個實例都將有一個私人secret。如果我想全部Container的實例共享訪問相同私有變量? (有很多方法當然是有一個公共變量來做到這一點)

所以,要呼叫Container任何情況下將降低secret 1和無論什麼情況下調用this.service它可以被稱爲只有4次。

+0

可能重複http://stackoverflow.com/questions/1535631/static-變量在JavaScript) – Philipp

+1

這不是 - 我的問題是更具體。 – ilyo

回答

3

使用IIFE創建對象的構造函數,並把祕密範圍內:

var Container = (function(){ 
    var secret = 3; 

    return function(param) { 
    function dec(){ 
     if (secret > 0) { 
     secret -= 1; 
     return true; 
     } else { 
     return false; 
     } 
    } 

    this.service = function(){ 
     if(dec()){ 
     return param; 
     } else { 
     return null; 
     } 
    }; 
    }; 
})(); 
[JavaScript中的靜態變量(指
+0

那麼你基本上做了什麼就是將Container包裝在另一個函數中,這樣返回的就可以訪問另一個關閉級別了? – ilyo

+0

@IlyaD正好。 – Sirko

相關問題