对于下面的代码,我想使用模块模式来保持成员私有并通过getter访问它们。它非常简单,不需要在构造函数中进行任何初始化。这是O.K吗?
/**
*Global - in process of removing
*/
var Globals = ( function ()
{
var globals =
{
tag_array: [],
load_on: 0,
current_tag: 0,
TIME: 4000,
PASS: 0,
FAIL: 1,
NOTDEFINED: 2
};
var GlobalsInternal = function ( )
{
};
GlobalsInternal.prototype.get = function( type )
{
return globals[ type ];
};
return GlobalsInternal;
} () );
使用
new Globals().get( 'TIME' );
答案 0 :(得分:5)
JavaScript没有类。
因此,没有构造函数 - 函数意味着没有构造函数,而空构造函数仍然是构造函数。
因此,如果需要new X
,那么X
必须评估构造函数(它实际上只是一个知道如何在上下文中运行的函数)。
无论如何,这是“好的”。请记住,只有一个globals
命名的对象(它在get
函数中以这样的名称关闭。)
(我认为josh3736的答案仅适用于“全局转储”。在JS 中,全局命名的对象是其他OO语言中的单例。)
答案 1 :(得分:3)
简单地做错了什么:
var Globals = {
tag_array: [],
load_on: 0,
current_tag: 0,
TIME: 4000,
PASS: 0,
FAIL: 1,
NOTDEFINED: 2
};
然后只是
Globals.TIME
说实话,你的样本似乎不必要地使得将经典OO强加到JavaScript上的东西变得复杂,这不是一种经典的OO语言。