【问题标题】:Is it possible for all instances of a function to have access to the same private var?一个函数的所有实例都可以访问同一个私有变量吗?
【发布时间】:2014-03-06 16:57:12
【问题描述】:

当我在 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 的实例共享对同一个 private 变量的访问权怎么办? (当然有很多方法可以使用公共变量)

因此,对Container任何 个实例的调用会将secret 降低1,并且无论是什么实例调用this.service,它都只能被调用4 次。

【问题讨论】:

标签: javascript oop object private


【解决方案1】:

使用 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;
      }
    };
  };
})();

【讨论】:

  • 那么您基本上所做的是将Container 包装在另一个函数中,以便返回的函数可以访问另一个级别的闭包?
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2019-02-02
  • 2013-04-22
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多