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
一样?那会是一个恰当的约定吗?
答案 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()