4

对于下面的代码,我想使用模块模式来保持成员私有并通过 getter 访问它们。它是如此简单,无需在构造函数中进行任何初始化。这个可以吗?

/**
 *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' );
4

2 回答 2

5

JavaScript 没有类。

所以没有构造函数意味着没有构造函数,空的构造函数仍然是构造函数。

因此,如果new X需要,则X 必须评估为构造函数(它实际上只是一个知道如何在上下文中表现的函数)。

无论如何,这都是“好的”。请记住,只有一个名为 by 的对象globals(并且它在get具有这样名称的函数中被封闭)。


(我认为 josh3736 的答案只是一个“全局转储”的优点。JS 中全局命名的对象其他 OO 语言意义上的单例。)

于 2012-04-18T01:01:02.780 回答
3

简单地做有什么问题:

var Globals = {
        tag_array:          [],
        load_on:            0,
        current_tag:        0,             
        TIME:               4000,
        PASS:               0,
        FAIL:               1,
        NOTDEFINED:         2
    };

然后就

Globals.TIME

老实说,您的示例似乎使事情变得不必要地复杂化,并且试图将经典 OO 强加到 JavaScript 上,这不是经典的 OO 语言

于 2012-04-18T01:10:24.833 回答