【发布时间】:2016-02-29 23:07:00
【问题描述】:
我试图了解如何创建揭示模块模式的不同实例。我在下面有一个代码块,并创建了 myRevealingModule 的 module1 和 module2 实例并设置了它们的名称变量。但是 module1 的名称被 module2 覆盖。如何为模块 1 和模块 2 设置不同的名称值?我错过了什么?谢谢!
var myRevealingModule = (function(){
var name = 'Default';
function setName (nameVal) {
name = nameVal;
};
function getName () {
return name;
};
return {
fullName: name,
set: setName,
get: getName
};
}());
var module1 = myRevealingModule;
module1.set("module1 name");
var module2 = myRevealingModule;
module2.set("module2 name");
【问题讨论】:
-
所有三个变量
myRevealingModule、module1和module2都持有对同一个对象的引用。看起来您在这里寻找的不是模块,而是构造函数,尤其是当您谈论“实例”时。模块是单例对象。 -
只有通过 myRevealingModule 使用构造函数来拥有 2 个不同的模块吗?我可以为 module1 和 module2 创建函数回调来设置名称值吗?谢谢!
-
是的,您需要一个能够创建多个对象的构造函数或工厂(如果您不想复制代码)。
-
我认为工厂适合我。谢谢!
标签: javascript oop design-patterns module-pattern revealing-module-pattern