Поддержание частного государства - PullRequest
2 голосов
/ 06 марта 2012

Я читал о поддержке частного состояния в javascript для файлов, имеющих один и тот же модуль.

Скажем, у нас есть файл1:

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

})();

и у нас есть файл2:

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 = myModule._private || {},

Я думал, var _private = myModule._private || {} сделает то же самое.Почему это делается так, как указано выше?И, кроме того, deleting myModule._private, myModule._seal and myModule._unseal не сделает его недоступным для дальнейшего использования?Но в статье говорится, что он запечатывает и распечатывает приватные переменные для использования в других файлах, поддерживая приватное состояние модуля.Любые намеки или идеи относительно этого шаблона?

Статья, на которую я ссылался, это this

1 Ответ

1 голос
/ 06 марта 2012

В начале, myModule._private может быть неопределенным.Если это так, var _private = myModule._private || {} всегда будет устанавливать _private в {} и оставлять myModule._private неопределенным (что приводит к удалению неопределенным), в то время как более длинный код установит myModule._private в {}, если он был неопределенным, и оставит его нетронутым в другом случае., а затем выполните _private = myModule._private;

Таким образом, все эти спагетти сделаны только для обеспечения безопасности delete myModule._private.

...