我试图了解如何创建不同的揭示模块模式实例。我在下面有一个代码块并创建 myRevealingModule 的 module1 和 module2 实例并设置它们的名称变量。但是 module1 的名称被 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");
最佳答案
要创建多个实例,您必须删除定义末尾的()
,这样您就可以在每次要创建新实例时单独调用它。请参阅下面 block 中的代码注释,了解进行了更改的三个地方:
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()
成为一个工厂函数。每次调用它时,它都会创建一个对象的新实例。
关于javascript - 创建揭示模块模式的实例,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/35711554/