是否可以将模块模式用于更多对象

问题描述 投票:-1回答:2
var modularpattern = (function () {
var sum = 0;

return {
    add: function () {
        sum = sum + 1;
        return sum;
    },

  }
} ());
var c = modularpattern;
c.add();   // 1
var d = modularpattern;
d.add();   //  2 but I want to be 1
 console.log(modularpattern.add());    // alerts: 3

是否有可能有更多的对象不仅一个?我想拥有私人领域,但同时还拥有更多只有一个对象?

javascript design-patterns private
2个回答
0
投票

是的,通过放弃IIFE调用以获得正常功能,这很容易实现。只有它被称为工厂模式,不再是模块。

function factory() {
    var sum = 0;
    return {
        add: function () {
            sum = sum + 1;
            return sum;
        }
    }
}
var c = factory();
c.add();   // 1
var d = factory();
d.add();   // 1
console.log(c.add()); // logs: 2

-1
投票

您可以使用模块模式创建一个工厂,该工厂使用模块模式创建更多对象。使用您的原始示例,它看起来像这样:

var moduleFactory = (function() {
  return {
    create: function() {
      return (function() {
        var sum = 0;
        return {
          add: function() {
            sum = sum + 1;
            return sum;
          }
        }
      })();
    }
  }
}
)();

var c = moduleFactory.create();
console.log(c.add()); //1
var d = moduleFactory.create();
console.log(d.add()); //1
© www.soinside.com 2019 - 2024. All rights reserved.