2

동일한 모듈을 가진 파일에서 javascript의 개인 상태 유지 관리에 대해 읽었습니다.개인 상태 유지

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

이었다 이해할 수 없었다

우리가 FILE1이 말 . 왜 위에서 언급 한 방식으로 끝났습니까? 또한 더 이상 사용하지 않으려면 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는 정의되지 않은 상태로 유지하며 (정의되지 않은 삭제로 연결되는 항목), 긴 코드는 정의되지 않은 경우 myModule._private를 {}로 설정하고 다른 경우에는 그대로 둡니다. 그렇다면 _private = myModule._private;

그래서이 모든 스파게티는 안전을 위해서 수행됩니다. delete myModule._private.

+0

을 반환하지만 myModule은이 파일로 전달 된 객체입니다. 입력으로 제공되는 myModule._private 변수를 변경하는 것이 디자인면에서 올바른 것입니까? – Ajai

+0

목표는 C#에서 부분 클래스와 같은 것을 구현하는 것입니다. 이 경우 입력 및 반환 값을 동일한 클래스의 객체로 처리해야하므로 다른 파일 (동일한 모듈)에서 가져온 "private"변수에 액세스하고 변경할 수 있어야합니다. – synek317