2

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

Скажем, у нас есть file1:

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

})(); 

и мы имеем file2:

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

+0

Ваш второй фрагмент ничего не возвращает. Я не уверен, почему вы переписываете 'Module' с' undefined'. – pimvdb

+0

@pimvdb: Это моя ошибка. Я возвращаю myModule – Ajai

ответ

1

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

Итак, все эти спагетти сделаны только для того, чтобы сделать сейф delete myModule._private.

+0

, но myModule - это объект, переданный этому файлу. Является ли даже правильным с точки зрения дизайна изменение переменной myModule._private, которая поступает в качестве входных данных? – Ajai

+0

Я думаю, что цель - реализовать что-то вроде частичных классов в C#. В этом случае вы хотите рассматривать входное и возвращаемое значение как объект одного и того же класса, поэтому у вас должна быть возможность доступа и изменения «частных» варов, которые поступают из другого файла (но того же модуля). – synek317