2

私は、同じモジュールを持つファイル間でjavascriptのプライベート状態の維持について読んでいました。私的な状態を維持する

var Module = (function(){ 
    //Some private variables declared. 
    // and initialized. 

})(); 

、我々はFILE2を持っている:

たちはFILE1を持っていると言う

var Module = (function(myModule){ 
    //Here the same private variables are required. 
    // And the following implementation enables it. 
    var _private = myModule._private = myModule._private || {}, 
    _seal = myModule._seal = myModule._seal || function() { 
     delete myModule._private; 
     delete myModule._seal; 
     delete myModule._unseal; 
    }, 
    _unseal = myModule._unseal = myModule._unseal || function() { 
     myModule._private = _private; 
     myModule._seal = _seal; 
     myModule._unseal = _unseal; 
    };  

    return myModule; 
}(Module || {})); 

私は理解できませんでした部分は、私がvar _private = myModule._private || {}が同じことをするだろうと思ったvar _private = myModule._private = myModule._private || {},

ました。上記の方法でなぜそれが行われますか?さらに、deleting myModule._private, myModule._seal and myModule._unsealはそれ以上の使用のためにアクセス不能にならないでしょうか?しかし、この記事では、モジュールのプライベートな状態を維持することによって、プライベート変数を他のファイルで使用するためのシールを行い、シールを解除すると述べています。このパターンに関するヒントや洞察はありますか?

私が言及していた記事がmyModule._privateを未定義にすることができ、冒頭でthis

+0

2番目のスニペットは何も返しません。どうして 'Module'を' undefined'で上書きしているのか分かりません。 – pimvdb

+0

@pimvdb:それは私の間違いです。私はmyModule – Ajai

答えて

1

です。その場合、var _private = myModule._private || {}は常に_privateを{}に設定し、myModule._privateは未定義のままにします(未定義の削除につながるもの)。長いコードはmyModule._privateを{}に設定し、未定義の場合はそのままにします。 _private = myModule._privateを実行します。

だから、このすべてのスパゲッティは安全のためだけに行われますdelete myModule._private

+0

を返しますが、myModuleはこのファイルに渡されるオブジェクトです。入力として提供されるmyModule._private変数を変更することはデザイン面で正しいのでしょうか? – Ajai

+0

私は目標がC#で部分クラスのようなものを実装することだと思います。この場合、入力と戻り値を同じクラスのオブジェクトとして扱いたいので、他のファイル(しかし同じモジュール)から来る "private"変数にアクセスして変更する必要があります。 – synek317

関連する問題