是否有可能函数的所有实例都可以访问同一个私有var?

时间:2014-02-09 12:19:30

标签: javascript oop object private

当我通过道格拉斯·克罗克福德(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次

1 个答案:

答案 0 :(得分: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;
      }
    };
  };
})();