4

以下のコードでは、モジュールパターンを使用してメンバーをプライベートに保ち、ゲッターを介してメンバーにアクセスします。非常に単純なので、コンストラクターに初期化を入れる必要はありません。これでいい?

/**
 *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 必要があります。

いずれにせよ、それは「大丈夫」です。によって名前が付けられたオブジェクトは1つだけであることに注意してください(そのような名前の関数でglobalsは閉じられています)。get


(josh3736の答えは、単なる「グローバルダンプ」にメリットがあると思います。JSでグローバルに名前が付けられたオブジェクトは、他のオブジェクト指向言語の意味ではシングルトンです。

于 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

正直なところ、あなたのサンプルは、古典的なオブジェクト指向言語ではないJavaScriptに古典的なオブジェクト指向を課そうとすることを不必要に複雑にしているようです。

于 2012-04-18T01:10:24.833 に答える