JS 의 개인 멤버
저 자 는 어린 시절 에 썼 지만 참고 가치 가 있 고 배 울 만 한 가치 가 있다.
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 (...) {...};
}
이 내용에 흥미가 있습니까?
현재 기사가 여러분의 문제를 해결하지 못하는 경우 AI 엔진은 머신러닝 분석(스마트 모델이 방금 만들어져 부정확한 경우가 있을 수 있음)을 통해 가장 유사한 기사를 추천합니다:
다양한 언어의 JSONJSON은 Javascript 표기법을 사용하여 데이터 구조를 레이아웃하는 데이터 형식입니다. 그러나 Javascript가 코드에서 이러한 구조를 나타낼 수 있는 유일한 언어는 아닙니다. 저는 일반적으로 '객체'{}...
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
CC BY-SA 2.5, CC BY-SA 3.0 및 CC BY-SA 4.0에 따라 라이센스가 부여됩니다.