Peter Michaux씨가 Firefox에서의 마법같은 eval(..., context)를 발견하셨습니다. 이는 여러분이 진정한 private 데이터를 만들 수 없다는 의미입니다:
[code:js]
// Getting "private" variables
var obj = (function() {
  var a = 21;
  return {
    // public function must reference 'a'
    fn: function() {a;}
  };
})();
 
var foo;
eval('foo=a', obj.fn);
console.log(foo); // 21
 
// Setting "private" variables
var obj = (function() {
  var a = 21;
  return {
    getA: function(){return a;},
    alertA: function(){alert(a);}
  };
})();
 
console.log(obj.getA()); //21
eval('a=3', obj.getA);
console.log(obj.getA()); // 3
obj.alertA(); // 3
물론, 이것은 동적 언어의 방식이며, 여전히 가치는 있습니다:
하지만, eval의 이런 사용은 모듈 패턴을 쓸모없게 만들지 않습니다. 그것의 가장 큰 이점은 코드를 모듈화함으로써 비슷한 변수 이름이 충돌되지 않도록 하고 여러분이나 다른 개발자들을 프로그램의 예기치 못한 오류로부터 보호해주는 것입니다. 모듈 패턴은 또한 코드를 보다 견고하게 만들어주는 new, this, prototype과 같은 키워드 없이도 OOP-스러운 것들을 가능하게 해줍니다.

모듈 패턴은 여전히 좋습니다. 단지 주요 브라우저에서 보안을 제공할 수 없을 뿐입니다.

from eval('foo=a', obj.fn); How you aren't private in Firefox
Posted by 행복한고니 트랙백 0 : 댓글 0