2016-11-18 5 views
1

저는 항상 자바 스크립트 클로저를 데이터 캡슐화를위한 완벽한 방법이라고 생각했습니다. 일종의 변수를 private로 만드는 것입니다. 하지만 최근에이 패턴이 아주 쉽게 악용 참조 시멘틱스에 의해 파괴되는 것을 깨달았다데이터 캡슐화를위한 JavaScript 클로저가 우회 될 수 있습니까?

function creator() { 
    var x = { 
    key: 3 
    }; 
    return function() { 
    return x; 
    } 
} 

var instance = creator(); 

var y = instance(); 

y.key = 4; 

//returns 4 
//y is a refernce to x 
console.log(instance()); 

어떻게 민간 부분 (creator()의 범위에 정의 된 변수는 외부에서 돌연변이 될 수 없음을 확인 할

답변

1

당신을? . 다르게 설정 한 경우에도 getters and setters를 사용해야합니다 MDN 예에 따라 동일한 값을 반환 할 수 있어야한다 :.

function creator() { 
    var x = { 
    get key() { 
     return 4; 
    }, 
    set key(x) { 
     // do nothing 
    } 
    }; 
    return function() { 
    return x; 
    } 
} 

당신이 키를 설정이 방법은, 세터는 입력 값을 삭제하고 원래 초기화 값을 유지

+0

고마워요, 제가 찾고 있었던 것과 정확히 일치합니다. –

+0

괜찮 았어! ;) – morels