js 민영화 속성
4161 단어 js
var Demo1 = function(val){
this.value = val;
this.getValue = function(){
return this.value;
}
};
var demo1Obj = new Demo1(1);
alert(demo1Obj.value); // 1
demo1Obj.value = 0;
alert(demo1Obj.getValue()); // 0
데모 1 의 대상 은 모두 하나의 value 속성 을 가지 고 있 으 며, new 일 때 초기 화 됩 니 다.그러나 value 자 체 는 개인 속성 이 아 닙 니 다. 저 희 는 'value' 방식 으로 속성 을 바 꿀 수 있 습 니 다.
그러나 어떻게 value 속성 을 민영화 합 니까?
여기 서 중요 한 문 제 는 value 변 수 를 정의 하여 this 대상 의 속성 에 직접 정의 하 는 것 입 니 다. 그러면 모든 Demo 1 의 대상 이 value 속성 을 가지 게 됩 니 다.
사실 우 리 는 value 를 대상 초기 화 에 만 존재 할 때 value 를 Demo 1 함수 의 부분 변수 로 정의 할 수 있 습 니 다. 그러면 다른 함수 외부 에 서 는 접근 할 수 없습니다. 또한 우 리 는 그 대상 에 게 이 속성의 인터페이스 에 접근 하도록 할 수 있 습 니 다.
예:
var Demo1 = function(val){
var value = val;
this.getValue = function(){
return value;
};
this.increment = function(inc){
value += inc;
}
};
var demo1Obj = new Demo1(1);
alert(demo1Obj.value); // 0
demo1Obj.value = 0;
demo1Obj.increment(4);
alert(demo1Obj.getValue()); // 5
사실 우 리 는 폐쇄 적 인 지식 을 사용 할 수 있다.
다음 과 같은 예 에서 보 듯 이:
var Demo2 = function(val){
var value = val;
return {
increment: function(inc){
if(typeof inc === 'number'){
value += inc;
}
},
getValue : function(){
return val;
}
}
};
var demo2Obj = new Demo2(4);
alert(demo2Obj.getValue()); // 4
alert(demo2Obj.val);//undefined
Demo 2 에서 대상 을 예화 한 후에 발 휘 된 것 은 새로운 구조 체 이다. 이 구조 체 의 방법 은 그 가 만 들 어 졌 을 때의 문맥 에 접근 할 수 있 는데 이것 이 바로 우리 가 말 한 폐쇄 이다.이 패 킷 에 있 는 함수 getValue 를 호출 하여 예화 할 때 들 어 오 는 매개 변수 val 의 값 을 가 져 올 수 있 습 니 다.
주: 여기 서 패 킷 에 접근 한 값 은 이 속성 값 의 복사 가 아니 라 그 자체 이기 때문에 increment 에서 수정 할 수 있 습 니 다.
또한 value 의 값 은 외부 에서 직접 얻 을 수 없 기 때문에 대상 속성의 패 키 징 을 실현 하 는 동시에 패 키 지 를 닫 는 형식 으로 해당 권한 을 조작 할 수 있 습 니 다.
한 마디 로 하면 속성 을 민영화 하 는 방법 은 속성 을 this 대상 에 직접 정의 하지 않 고 전체 함수 의 부분 변수 에 넣 는 것 이다.
이 내용에 흥미가 있습니까?
현재 기사가 여러분의 문제를 해결하지 못하는 경우 AI 엔진은 머신러닝 분석(스마트 모델이 방금 만들어져 부정확한 경우가 있을 수 있음)을 통해 가장 유사한 기사를 추천합니다:
[2022.04.19] 자바스크립트 this - 생성자 함수와 이벤트리스너에서의 this18일에 this에 대해 공부하면서 적었던 일반적인 함수나 객체에서의 this가 아닌 오늘은 이벤트리스너와 생성자 함수 안에서의 this를 살펴보기로 했다. new 키워드를 붙여 함수를 생성자로 사용할 때 this는...
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
CC BY-SA 2.5, CC BY-SA 3.0 및 CC BY-SA 4.0에 따라 라이센스가 부여됩니다.