2013-06-08 3 views
0

public 메소드 getter 및 setter를 노출시키지 않고 프로토 타입 메소드가 생성자에서 private 변수 (클로저를 통해 액세스 한 값)에 액세스하는 방법은 무엇입니까?프로토 타입에 정의 된 함수는 개인 변수에 액세스 할 수 있습니까?

function User() { 

    var value = 1; 

    this.increment = function() { 
     value++; 
    }; 

    this.set = function (val) { 
     value=val; 
    }; 
    this.get = function() { 
     return value; 
    };  
} 

User.protptype.add = function (value) { 
    this.set(this.get()+value); 
} 

get() 및 set()을 제거하고 add() 사본을 하나만 가질 수있는 방법은 무엇입니까?

의도는 add() 함수의 인스턴스가 하나만 있고 각 개체에 대해 만들어진 인스턴스가 아니라는 것을 보장하는 것입니다.이 개체는이 경우 private 변수, 생성자의 value 변수에 액세스 할 수 있습니다.

+1

중복 가능성 [자바 스크립트 - 프로토 정의 함수 비공개 멤버 변수 액세스 (http://stackoverflow.com/questions/436120/javascript-accessing-private-member-variables-from-prototype-defined -functions) 및 [Prototype 함수에 액세스 할 수있는 private 변수를 만드는 방법?] (http://stackoverflow.com/questions/6307684/how-to-create-private-variable-accessible-to-prototype-function)을 참조하십시오. 두 번째 해결 방법이 있습니다. –

답변

2

개인의 개념이 JavaScript의 일부가 아니었기 때문에 자연스럽게 그렇게 할 수있는 방법이 없었습니다. 당신은 JS에서 "에뮬레이션"비공개입니다.

"private"멤버를 볼 수 있도록 메서드 선언을 생성자 범위 내에 배치하는 것이 유일한 방법입니다. 그러나 이것은 모든 인스턴스에서 함수를 복제하는 것을 의미하며 함수는 프로토 타입이 아닌 인스턴스에 있습니다.

function User(){ 

    var value = 1; 

    this.add = function(newValue){ 
    value += newValue; 
    }; 

} 
관련 문제