结构编程 - 这个javascript模式叫什么?可以使用它吗?

时间:2011-09-12 10:50:19

标签: javascript design-patterns

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 :(得分:0)

使用这种模式是可以的,从你以前写过的,我会说你是范围。优点是你不创建全局变量,这总是一件好事。缺点是,在创建整个对象之前,您无法访问该对象的任何值(我很多时候都被它抓住了)。

我不确定这个模式是否有名称,但我想,它是对象文字创建。

答案 1 :(得分:0)

Singleton是一种设计模式,它强制实现它的类只提供一个访问点。通常,单身人士用于集中管理内部或外部资源,并提供全球访问权限。
http://addyosmani.com/resources/essentialjsdesignpatterns/book/#singletonpatternjavascript

答案 2 :(得分:0)

如果您不想使用类|对象实例化,那么最好的方法是(来自您的样本):

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()