2014-01-14 3 views
0

Мой вопрос касается шаблона модуля js. Существует модуль:Js Module Pattern Несколько init

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

В первом примере возвращает объект, а не функцию, поэтому, когда мы сохраняем его в новой области памяти, получаем ссылку на объект, а не на копию независимого модуля (т. Е. Мне не удалось сохранить данные для каждого экземпляра класса). Второй пример не подходит для меня, так как мне нужно будет переписать уже готовые модули. Возможно, есть другие решения проблемы, или я не совсем правильно понял ваш первый пример? –

Смежные вопросы