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

时间:2017-01-10 21:25:43

标签: javascript design-patterns private

document.getElementById('menu-ic').addEventListener('click', function(evt) {
	document.getElementById('menu-hidden').style.left = '0';
	document.getElementById('l1').style.cssText = 'background-color: #000000;width:0px;';
	document.getElementById('l2').style.cssText = 'background-color: #000000;width:26px;';
	document.getElementById('l3').style.cssText = 'background-color: #000000;width:0px;';
		if (document.getElementById('menu-hidden').style.left = '0') {
			document.getElementById('menu-ic').addEventListener('click', function(evt) {
				document.getElementById('menu-hidden').style.left = '-300px';
				document.getElementById('l1').style.cssText = 'width:20px;';
				document.getElementById('l2').style.cssText = 'width:24px;';
				document.getElementById('l3').style.cssText = 'width:22px;';
			});
		}
});

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

2 个答案:

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