JS 의 개인 멤버

5590 단어
Private Members in JavaScripthttp://www.crockford.com/javascript/private.html
저 자 는 어린 시절 에 썼 지만 참고 가치 가 있 고 배 울 만 한 가치 가 있다.
JavaScript 의 개인 구성원
      자 바스 크 립 트 는 세계 에서 가장 오 해 받 는 프로 그래 밍 언어 다.일부 사람들 은 정보 숨 김 (information hiding) 의 특성 이 부족 하 다 고 생각한다. 이 유 는 대상 에 게 개인 인 스 턴 스 변수 와 방법 이 있어 서 는 안 된다 는 것 이다.그러나 이 는 자 바스 크 립 트 대상 에 개인 구성원 이 있 을 수 있다 는 오해 다.다음은 설명 이다.
     대상 개체
     자 바스 크 립 트 의 본질은 대상 이다.배열 은 대상 이 고 함 수 는 대상 이 며 대상 은 대상 이다.그럼 무슨 상 대 죠?대상 은 이름 값 쌍 (name - value pairs) 의 집합 입 니 다.이름 은 문자열 (string) 이 고 값 은 문자열, 수치, 불 값 또는 대상 (배열 과 함수 포함) 입 니 다.대상 은 값 을 빠르게 얻 을 수 있 도록 해시 표 로 구현 된다.
 
     값 이 함수 (function) 라면 방법 (method) 이 라 고 할 수 있 습 니 다.대상 의 어떤 방법 이 호출 될 때 변수 this 는 이 대상 에 설정 되 고 방법 은 this 변 수 를 통 해 인 스 턴 스 변 수 를 사용 할 수 있 습 니 다.
 
     대상 은 구조 기 (constructor) 를 통 해 만 들 수 있 습 니 다. 구조 기 는 대상 을 초기 화 할 수 있 는 함수 입 니 다.구조 기 는 정적 변수 와 방법 을 포함 한 다른 언어 중의 특징 을 나 타 냈 다.
      공개
     한 대상 의 멤버 는 모두 공개 멤버 입 니 다. member)。모든 함수 가 이 구성원 들 에 게 접근 하거나 수정 하거나 삭제 할 수 있 습 니 다.구성원 을 새로운 대상 에 넣 는 두 가지 주요 방식 이 있다.
      방법 1: 구조 기 에서 (In) the constructor)
      이 기술 은 일반적으로 공 개 된 실례 변 수 를 초기 화 하 는 데 쓰 인 다.구조 기의 this 변 수 는 구성원 을 대상 에 추가 하 는 데 사 용 됩 니 다.
 
function Container(param) {
    this.member = param;
}

     그렇다면 우리 가 이렇게 새로운 대상 을 만 들 면:
     var myContainer = new Container('abc');
     그리고 my Contianer. member 의 값 은 'abc' 입 니 다.
     방법 2: 원형 에서 (In the prototype)
      이 기술 은 통상 적 으로 공 개 된 방법 을 초기 화 하 는 데 쓰 인 다.한 멤버 를 찾 고 대상 자체 에서 찾 을 수 없 으 면 대상 의 구조 기 원형 prototype 멤버 에서 찾 아 보 세 요.원형 체 제 는 계승 에 도 사용 되 고 저장 할 수 있다.하나의 구조 기 를 통 해 모든 대상 에 게 방법 을 추가 하기 위해 서 우 리 는 구조 기의 prototype 속성 에 함 수 를 추가 할 수 있 습 니 다.
     
Container.prototype.stamp = function (string) {
    return this.member + string;
}
     그러면 우 리 는 이렇게 이 방법 을 호출 할 수 있다.
 
     myContainer.stamp('def');
     'abcdef' 로 돌아 갑 니 다.
      
      사유
     개인 구성원 은 구조 기 에 의 해 만들어 진다.일반적인 var 변수 와 구조 기의 매개 변 수 는 개인 구성원 입 니 다.
function Container(param) {
    this.member = param;
    var secret = 3;
    var that = this;
}

    이 구조 기 는 param, secret, that 세 개의 개인 인 스 턴 스 변 수 를 만 들 었 습 니 다.이들 은 모두 이 대상 에 의존 하지만 대상 외부 에서 방문 할 수도 없고 대상 자체 의 공개 방법 에 방문 할 수도 없다.그들 은 사유 방법 만 볼 수 있다.개인 적 인 방법 은 구조 기의 내부 함수 이다.
function Container(param) {

    function dec() {
        if (secret > 0) {
            secret -= 1;
            return true;
        } else {
            return false;
        }
    }

    this.member = param;
    var secret = 3;
    var that = this;
}

 
     개인 적 인 방법 dec 에서 secret 인 스 턴 스 변 수 를 검사 하고 0 이상 이면 1 을 줄 이 고 true 로 돌아 갑 니 다.그렇지 않 으 면 false 로 돌아 갑 니 다.그것 은 대상 을 세 번 만 사용 하도록 제한 하 는 데 쓸 수 있다.
     
     일반적으로 저 희 는 개인 적 인 that 변 수 를 만 들 고 개인 적 인 방법 도 대상 을 참조 할 수 있 습 니 다. 이것 은 ECMAScript 규범 에서 언급 한 오 류 를 피하 기 위해 서 입 니 다. this 는 함수 의 내부 함수 가 window 를 정확하게 가리 키 지 않 습 니 다.    다음 코드 와 같이:
    //본문 번역자 가 도입 한 예
function a(){   
	console.log(this);  //a {}
	function b(){     
		console.log(this);  //window   
	}   
	b(); 
} 

new a();

     그러나 이 문 제 는 엄격 한 패턴 에서 수정 됐다.임시 저장 방식 을 사용 하여 비 엄격 한 모델 에서 만 사용 합 니 다.     
 
     사유 방법 은 공개 적 인 방법 으로 호출 될 수 없다.개인 적 인 방법 을 유용 하 게 하기 위해 서 는 권한 수여 방법 (privileged method) 을 도입 해 야 합 니 다.
   
    권한 부여 Privileged
    권한 수여 방법 은 개인 변수 와 방법 에 접근 할 수 있 으 며, 그 자체 가 공개 방법 과 대상 외부 에 접근 할 수 있 습 니 다.권한 수여 방법 을 삭제 하거나 교체 할 수 있 지만 수정 하거나 비밀 을 포기 할 수 없습니다.
    권한 수여 방법 은 this 변 수 를 통 해 구조 기 내부 에서 값 을 부여 합 니 다.
function Container(param) {

    function dec() {
        if (secret > 0) {
            secret -= 1;
            return true;
        } else {
            return false;
        }
    }

    this.member = param;
    var secret = 3;
    var that = this;

    this.service = function () {
        return dec() ? that.member : null;
    };
}

    여기 서 비 스 는 권한 수여 방법 이다.my Container. service () 를 호출 하면 세 번 호출 된 첫 번 째 때 'abc' 로 돌아 간 후 null 로 돌아 갑 니 다.service 는 개인 적 인 dec 방법 을 호출 했 습 니 다. dec 에 개인 적 인 secret 변 수 를 방문 하 였 습 니 다.서 비 스 는 다른 대상 과 방법 에 대해 서 는 사용 할 수 있 지만 개인 구성원 에 게 직접 접근 하 는 것 은 허용 되 지 않 습 니 다.
 
    폐쇄 폐쇄 폐쇄
     공개, 개인, 권한 수여 멤버 가 가능 한 이 유 는 자 바스 크 립 트 · 폐쇄 (Closures) 가 있 기 때문이다.이것 은 내부 함수 가 항상 var 와 외부 함수 의 인 자 를 방문 할 수 있 고 심지어 외부 함수 가 돌아 온 후에 도.이것 은 언어의 매우 유력 한 특성 이다.(주: 여기 생략 이 있 습 니 다. 대 의 는 작가 가 글 을 쓸 때 폐쇄 개념 을 언급 하 는 책 이 별로 없고 더 이상 토론 할 필요 도 없습니다)
 
    패턴 패턴
     Public
     
function Constructor(...) { 
    this.membername = value;
}
Constructor.prototype.membername = value;
  
 
    Private
    
function Constructor(...) { 
   var that = this;
   var membername = value; 
   function membername(...) {...}
}

    주의: 함수 문
    function membername(...) {...}
    다음 문장의 약자 입 니 다.
    var membername = function membername(...) {...};
    즉, membername 도 var 성명 의 개인 구성원 (방법) 이다. 
 
     Privileged
function Constructor(...) { 
     this.membername = function (...) {...};
}

 

좋은 웹페이지 즐겨찾기