2014-01-14 114 views
0

我的问题是关于js模块模式。有一个模块:Js模块模式多个初始化

var moduleName = (function(self) { 

    self.init() = function(){ 

    return self; 
    } 
    //Othert methods 

    return self; 
}(moduleName || {})); 

请告诉我如何使用此模式创建多个初始化(模仿类实例)?

+0

只需包含一个构造函数来在你的模块中构造实例? – Bergi

+0

请问之前请研究。关于模仿JavaScript中的类有很多文献(在线),包括StackOverflow中的一些问题。请回来一个更具体的问题。 – Bergi

+0

架构我的应用程序建立在模块模式。目前,存在用于存储数据集的类模仿实例的问题。我可以使用构造函数模式,但它需要被重写为类。 –

回答

0

简单!

moduleName.init(); // Initialized once 
moduleName.init(); // Initialized twice 

如果你想如下跟随工厂模式创建多个模块,调整你的代码:

var newModuleName = function() { 
    return (function moduleName(self){ 

    self.init = function(){ 
     return self; 
    }; 

    //Other methods 

    return self; 
    }({})); 
}()); 

var module1 = newModuleName(); 
var module2 = newModuleName(); 

module1.init(); 
module2.init(); 

另外,使用传统的构造格局

var moduleName = function() { 
    var self = this; 

    if (!(self instanceof moduleName)){ 
    return new moduleName(); 
    } 

    self.init = function(){ 
    return self; 
    }; 

    //Other methods 
}; 
+0

在第一个例子中,返回一个对象而不是一个函数,所以当我们将它保存到一个新的内存区域时,得到一个对象的引用,而不是一个独立模块的副本(即,我没有保留每个类的实例的数据)。 第二个例子不适合我,因为我需要重写已经完成的模块。 也许还有其他问题的解决方案,或者我没有正确理解你的第一个例子? –