2016-03-17 4 views
1

Я следовал довольно простному образцу модуля Стефанова. Все получилось прекрасно, пока не было огромных изменений в дизайне: мне нужно создать несколько экземпляров моего модуля.
Вот несколько короткого пример кода, который показывает, как эта картина выглядит следующим образом:JavaScript: экземпляр шаблона модуля Стефанова

var MYAPP = MYAPP || {}; 

MYAPP = (function(){ 

    // private properties 
    var connector = "connector.php", 

     my_list = [], 
     current_item = {}, 
     beforeRender = false; 

    // private methods 
    _addCurrentItem = function(amount){ 
    }, 

    // public methods 
    add = function(amount){ 
     amount += 5; 
     _addCurrentItem(amount); 
    } 

    // public API 
    return { 
     add: add 
    }; 

}()); 

Все было прекрасно, когда только с помощью одного экземпляра MYAPP. но теперь мне нужно больше экземпляров и выяснили, что я не могу создать экземпляр моего модуля таким образом. var my_instance = new MYAPP; не работает, потому что нет конструктора.

Что является самым быстрым и лучшим способом сделать мой модуль образцом?

благодарит за любую помощь и предложения!

+0

Возвращает функцию, возвращающую то, что теперь является вашим модулем. Или верните конструктор. –

+0

Можете ли вы использовать реальные модули? – ssube

+0

@NickTomlin, можете ли вы дать мне пример, пожалуйста? –

ответ

1

Как насчет:

  • Снять самостоятельно вызвать
  • Сохранить в другой переменной (например, App)
  • Instantiate отдельно

Как так:

var MYAPP = MYAPP || {}; 

var App = function(){ 

    // private properties 
    var connector = "connector.php", 

     my_list = [], 
     current_item = {}, 
     beforeRender = false; 

    // private methods 
    _addCurrentItem = function(amount){ 
    }, 

    // public methods 
    add = function(amount){ 
     amount += 5; 
     _addCurrentItem(amount); 
    } 

    // public API 
    return { 
     add: add 
    }; 

}; 

MYAPP = new App(); 
MYOTHERAPP = new App(); 
+0

спасибо, я сейчас изучаю его; как насчет частных переменных/методов? действительно ли удаление самоисключения ничего не меняет в плане конфиденциальности? –

+0

Нет. В стороне, [это также очень хорошее чтение на шаблонах Javascript] (https://addyosmani.com/resources/essentialjsdesignpatterns/book/#modulepatternjavascript). В частности, [Выявление шаблона модуля] (https://addyosmani.com/resources/essentialjsdesignpatterns/book/#revealingmodulepatternjavascript) – Martin

+0

ОК, спасибо! У меня есть книга Стефанова - и я не понимаю более сложных реализаций шаблона модуля, когда более простые из них, похоже, способны сделать все. –

0

return { init: function() {}}

приведенный выше код эффективно создает экземпляр модуля.

+0

Пожалуйста, добавьте некоторое объяснение. В настоящее время ваш ответ помечен как «низкое качество» и в конечном итоге может быть удален без него. –

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