Globals的注册表模式|验证

时间:2012-04-18 00:58:40

标签: javascript

对于下面的代码,我想使用模块模式来保持成员私有并通过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' );

2 个答案:

答案 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语言