创建显示模块模式的实例

时间:2016-02-29 23:07:00

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

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

1 个答案:

答案 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()成为工厂函数。每次调用它时,它都会创建对象的新实例。