我试图了解如何创建揭示模块模式的不同实例。我在下面有一个代码块,并创建myRevealingModule的module1和module2实例并设置它们的名称变量。但module2的名称将被module2覆盖。如何为module1和module2提供不同的名称值?我错过了什么?谢谢!
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");
答案 0 :(得分:2)
要创建多个实例,您必须删除定义末尾的()
,以便每次要创建新实例时都可以单独调用它。请参阅以下块中的代码注释,了解更改的三个位置:
var myRevealingModule = (function(){
var name = 'Default';
function setName (nameVal) {
name = nameVal;
};
function getName () {
return name;
};
return {
fullName: name,
set: setName,
get: getName
};
}); // removed the () here
var module1 = myRevealingModule(); // added () here to call factory function
module1.set("module1 name");
var module2 = myRevealingModule(); // added () here to call factory function
module2.set("module2 name");
这使myRevealingModule()
成为工厂函数。每次调用它时,它都会创建对象的新实例。