Структурное программирование. Как называется этот шаблон JavaScript?Это нормально, используя его? - PullRequest
2 голосов
/ 12 сентября 2011
var contextMenu = {

    isVisible : false,

    open : function()
    {
            //some code here
    },

    close : function()
    {
            //some code here
    }   
}

Я активно использую этот шаблон в своем коде. Мое приложение может быть выполнено с использованием структурного программирования без необходимости создания экземпляров классов / объектов.

Сначала я писал что-то вроде этого:

var isContextMenuVisible : false,

function openContextMenu()
{
    //some code here
} 

function closeContextMenu()
{
    //some code here
}   

Это хорошо? Как называется эта модель? Какие недостатки?

РЕДАКТИРОВАТЬ : Это называется одноэлементным паттерном

Кстати, можно ли использовать заглавные имена для объекта? Как ContextMenu вместо contextMenu? Будет ли это правильным соглашением?

Ответы [ 3 ]

0 голосов
/ 12 сентября 2011

Singleton - это шаблон проектирования, который заставляет классы, которые его реализуют, предлагать только одну точку доступа к ним. Обычно синглтоны используются для централизованного управления внутренними или внешними ресурсами и предоставляют глобальную точку доступа к себе.
http://addyosmani.com/resources/essentialjsdesignpatterns/book/#singletonpatternjavascript

0 голосов
/ 12 сентября 2011

Если вы не хотите использовать классы | создание объектов, то лучше всего (из ваших примеров):

function openContextMenu() {
  // some code here
  // you can use 'this' to point to current object
} 
function closeContextMenu() {
  // some code here
  // you can use 'this' to point to current object
}  
var contextMenu = {
    isVisible : false,
    open : openContextMenu,
    close : closeContextMenu   
};
var contextMenu2 = {
    isVisible : false,
    open : openContextMenu,
    close : closeContextMenu   
};

Это позволит вам создать более одного объекта и минимизировать использование памяти.


Но дальше будет проще:

function ConextMenu() {
}
ConextMenu.prototype.isVisible=false;
ConextMenu.prototype.open=function openContextMenu() {};
ConextMenu.prototype.close=function closeContextMenu() {};

var contextMenu = new ConextMenu;
var contextMenu2 = new ConextMenu; // or new ContextMenu()
0 голосов
/ 12 сентября 2011

Можно использовать этот шаблон, из того, что вы писали раньше, я бы сказал, что вы просматриваете. Преимущества в том, что вы не создаете глобальные переменные, что всегда хорошо. Недостатки в том, что вы не можете получить доступ к какому-либо из значений объекта, пока не будет создан весь объект (меня это очень часто ловит).

Я не уверен, что у этого шаблона есть имя, но, я полагаю, это объектно-литеральное создание.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...