JS 模块模式

时间:2020-12-23 13:51:53

标签: javascript

我尝试了解模块设计模式在 JS 中的使用。我的问题是对以下函数的多次调用(使用 new 运算符)将创建具有函数 increset 副本的对象。这似乎是一种浪费,使这种模式无用。我错过了什么?

    function Counter(start) {
        let counter = 0;
        function setCounter(x) { counter = x;} // private function
        setCounter(start);

        return {
            inc: function () { return counter++;},
            reset: function () { setCounter(0); }
        }
    }

1 个答案:

答案 0 :(得分:0)

虽然您有多个 increset 函数,但它们对不同的 counter 变量进行操作,因此不是副本。

function counter(start) {
  let counter = 0;

  function setCounter(x) {
    counter = x;
  } // private function
  setCounter(start);

  return {
    inc: function() {
      return counter++;
    },
    reset: function() {
      setCounter(0);
    }
  }
}


const one = counter(0);
const two = counter(0);

console.log(one.inc());
console.log(one.inc());
console.log(one.inc());
console.log(one.inc());
console.log("---");
console.log(two.inc());
console.log(two.inc());
console.log("---");
console.log(one.inc());

相关问题