2014-02-09 63 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

相关问题