2016-06-17 2 views
-1

다음 기사를 읽은 후 http://javascriptplayground.com/blog/2012/04/javascript-module-pattern/ 내 JS에서 모듈을 구현하기로 결정했습니다. 당신이 볼 수 있듯이JS 모듈에 비공개로 유지되지 않는 개인 변수

불행하게도, 내가하지 않는 것 사용하고있는 모듈은 전용 변수 개인을 유지하는,

var popoverOptionsModule = (function() { 
var _stopAskingList = []; 

var addToStopAskingList = function(itemToAdd) { 
    if (_stopAskingList.indexOf(itemToAdd) === -1){ 
     _stopAskingList.push(itemToAdd); 
    } 
} 

var getStopAskingList = function() { 
    return _stopAskingList; 
} 


return { 
    addToStopAskingList: addToStopAskingList, 
    getStopAskingList: getStopAskingList, 
}; 
})(); 

popoverOptionsModule._stopAskingList = 4; 
console.log(popoverOptionsModule._stopAskingList); 

, 나는 popoverOptionsModule._stopAskingList의 값을 변경하고 업데이트를 로그인 할 수 있어요 콘솔로 ... 나는이 일이 일어나지 않았다고 생각했다. 당신의 도움을 주셔서 감사합니다!

+0

'console.log (popoverOptionsModule.getStopAskingList())'를 시도해보십시오. 이것이 처음부터 getter 함수를 구현 한 이유입니다. 'popoverOptionsModule._stopAskingList = 4;를 실행하여 – JJJ

+3

을 생성하면 객체에 새로운 속성을 생성하므로 당연히 console.log를 출력 할 수 있습니다. 해당 행을 제거하면 예상대로 정의되지 않은 상태로 기록됩니다. – GillesC

+2

나는 이것이 왜 downvoted 이유를 볼 수 없습니다; 포스터가 겪고있는 문제는 매우 분명합니다. 또한 포스터가 노출되지 않으면 즉각적인 명백한 개념이 아닙니다. 예, 자바 스크립트로 자주 작업하는 대부분의 사람들이 노출되어 있지만 노출되지 않은 것에 대해 질문하는 것은 완벽하게 관련이 있습니다. – Claies

답변

2

JS가 완전히 동적으로 입력됩니다, 그래서 당신은 라인을

popoverOptionsModule._stopAskingList = 4; 

이있을 때 당신은 단지이 변수를 생성하고 그것을 값을 할당 한 다음 줄은 성공 따라서 이유. 이 행이 없으면 다음 console.log가 undefined를보고합니다. 이 코드는 너무

popoverOptionsModule._abc = 4; 
console.log(popoverOptionsModule._abc); 

이 언어가 보호 수준을 구현 OO 같은 방법으로 개인 변수가 실제로없는 것을 기억 일하는 것이 아니라 호출자에서 숨길 시도 단지 API 패턴입니다.