javascript - 创建揭示模块模式的实例

标签 javascript oop design-patterns module-pattern revealing-module-pattern

我试图了解如何创建不同的揭示模块模式实例。我在下面有一个代码块并创建 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/

相关文章:

javascript - 监听 HTML 元素值的任何变化(由代码引起)

c# - 当职责不属于该类时,使用多态性而不是条件

Java 获取已知类名的现有对象列表(动态)

c++ - 是为每个对象创建单独的函数还是为每个类创建一个函数?

design-patterns - super 战略模式是什么?

java - 这是用不同单位实现距离的好方法吗

model-view-controller - Java EE 架构和模式

Javascript:变量不是未定义的,而是在返回时返回未定义的

javascript - 高度 100% 不适用于嵌套 div

javascript - $http().使用 "?"传递额外的 GET 参数时获取 SyntaxError