2013-11-03 5 views
4

JavaScript의 프로토 타입 패턴 공개에서 개인 변수에 문제가 있습니다. 공유 된 (싱글 톤) 프로토 타입 내에서 몇 가지 다른 함수에서 사용되는 개인 변수를 노출하지 않고 어떻게 사용할 수 있는지 알 수 없습니다. 다음은 내가 의미하는 바의 예입니다. JSFiddle.프로토 타입 패턴 전용 변수 공개

var vthis.v을 사용하는 데 문제가 있습니다. 첫 번째 것은 모든 인스턴스의 상태를 엉망으로 만들지 만 두 번째는 공개적으로 볼 수 있습니다. v 개인을 보유하고 각각의 개별 인스턴스에 대해 상태를 보존 할 수있는 방법이 있습니까?

+1

예, JavaScript에서 인스턴스 별 "개인"변수를 가질 수 있지만이를 사용하는 모든 함수는 생성자 함수 본문에 정의되어야합니다 (Paul의 대답 참조). 이것은 인스턴스를 생성하기 위해 더 많은 CPU와 메모리가 필요하다는 것을 의미합니다. 더 많은 자원을 소비하는 코드를 작성해야하는 충분한 이유가있는 경우이를 수행하십시오. 개인적으로 나는 그것에 대한 충분한 이유를 결코 발견하지 못했고 바울과 개인적으로 의도 된 것을 나타 내기 위해 변수 앞에 밑줄을 붙이는 것에 동의 할 것이다. 프로토 타입, 상속에 대한 자세한 정보 ... http://stackoverflow.com/a/16063711/1641941 – HMR

답변

6

공개 프로토 타입 패턴으로이를 수행 할 방법이 없습니다.

는 당신은 할 수있는이 같은 뭔가 :

function MyClass() { 
    var v = 1; 
    this.getV = function() { 
     return v; 
    }; 
} 

그리고 이런 종류의 접근법에 대한 몇 가지 골수 매니아가 그 이유입니다.

개인 옵션 : 앞에 밑줄을 붙인 다음 대상 위에 올리십시오 : this._v. JavaScript와 싸우지 마십시오. 그걸 써.

+0

전용 멤버 만 얻을 수있는 것처럼 보입니다. 세터가 필요하다면 공개적으로 볼 수 있어야하며, this.setV = function (value) {...}을 사용하는 것은 의미가 없습니다. 나는'this._v';와 함께 살거야;) –

+0

@ lucky3, 거기에 세터를위한 용도가있다. 'v'가 양수인지 확인하고 싶다고합시다. 'setV'는 그 검증을 할 것입니다. –