2014-01-14 141 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

在第一個例子中,返回一個對象而不是一個函數,所以當我們將它保存到一個新的內存區域時,得到一個對象的引用,而不是一個獨立模塊的副本(即,我沒有保留每個類的實例的數據)。 第二個例子不適合我,因爲我需要重寫已經完成的模塊。 也許還有其他問題的解決方案,或者我沒有正確理解你的第一個例子? –