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 대상 에 직접 정의 하지 않 고 전체 함수 의 부분 변수 에 넣 는 것 이다.

좋은 웹페이지 즐겨찾기