자 바스 크 립 트 대상 프로그램 설계(6):패키지

4218 단어 JavaScript각본
포장 은 대상 을 대상 으로 하 는 중요 한 개념 중의 하나 이다.프로그램 이 봉인 성 이 없다 면 대상 을 향 한 것 은 말 할 나 위도 없다.그러나 자바 스 크 립 트 는 다른 언어 와 같 지 않다.예 를 들 어 자바,공유 변수 와 사유 변수 등 이 있다.JavaScript 에 서 는 하나의 역할 영역 만 있 습 니 다.공유 역할 영역 입 니 다.이 장 에서 우 리 는 자바 스 크 립 트 가 어떻게 패 키 징 의 특성 을 실현 하 는 지 볼 수 있 을 것 이다.
 
1.this 와 공유 변수
 
우선 this 키 워드 를 이해 해 야 합 니 다.아래 의 코드 를 보면 익숙해 져 야 한다.
 
function Person(name, age) {
    this.name = name; //         
   this.age = age;
    this.show = function() { //         
        alert("name: " + name + "; age: " + age);
    }
}
var bill = new Person("Bill", 20);
alert(bill.name);
bill.show();

 
이곳 의 this 키 워드 는 없어 서 는 안 된다.앞 에 서 는 그냥 기억 하 라 고 했 는데 왜 그 랬 을 까?자 바스 크 립 트 의 대상 을 생각해 보 세 요.자 바스 크 립 트 의 대상 은 해시,키-값 이 맞 는 집합 과 유사 합 니 다.이곳 의 대상 의 속성 은 사실상 모두 분 산 된 것 으로 다른 언어 처럼 한 대상 에 연결 되 어 있 지 않다.this 키 워드 는 속성 이나 함수 의 호출 자 를 말 합 니 다.즉,이 속성 이나 함 수 를 호출 하 는 사람 이 누 구 를 말 합 니 다.이 를 통 해 알 수 있 듯 이 이곳 의 this 는 자바 나 C++의 this 와 다 릅 니 다.후자 의 this 는 속성 이나 함수 가 있 는 대상 자 체 를 말 합 니 다.여기 this 의 역할 은 그 뒤에 따 르 는 속성 이나 대상 을 호출 자 에 연결 하 는 것 입 니 다.자 바스 크 립 트 의 new 과정 을 회상 해 보 세 요.먼저 빈 대상 을 만 든 다음 구조 함수 로 대상 을 초기 화하 고 마지막 으로 이 대상 을 되 돌려 줍 니 다.이 과정 에서 자바 스 크 립 트 는 this 를 이 대상 으로 교체 합 니 다.즉,대상 을 이러한 속성 이나 함수 와 연결 시 키 는 것 입 니 다.마치 이 호출 자가 이 속성 이나 함 수 를 가지 고 있 는 것 처럼 보이 지만 사실은 this 의 역할 입 니 다.
 
이렇게 보면 show 안의 name 과 age 는 키워드 가 없 지만 정상적으로 실행 하면 어떻게 된 일 인지 알 수 있 습 니 다.앞에서 이미 this 로 name 과 age 를 이 대상 bill 과 연결 시 켰 고 show 도 이 bill 변수 와 연결 되 었 기 때문에 자바 스 크 립 트 는 이 두 변 수 를 찾 을 수 있 습 니 다.
 
이렇게 보면 this 가 수식 하 는 것 은 모두 공유 변수 인 것 같다.사실은 그렇습니다.변 수 를 공유 변수 로 만 들 려 면 this 를 사용 할 수 있 습 니 다.위의 코드 에 있 는 name 과 age 는 모두 공유 변수 입 니 다.밖에서 aPerson.name 또는 aPerson.age 를 사용 하면 접근 할 수 있 습 니 다.
 
2.개인 변수
 
개인 변 수 를 어떻게 설명 합 니까?사실 앞에서 말 했 듯 이 자 바스 크 립 트 는 개인 적 인 역할 영역 이 없다.그럼 다음 코드 를 보 겠 습 니 다.
 
function Person(name, age) {
    var name = name; //     
   var age = age;
    var show = function() { //     
        alert("name: " + name + "; age: " + age);
    }
}
var bill = new Person("Bill", 20);
alert(bill.name); // undefined
bill.show(); // error,    

  
이 코드 는 앞 과 거의 같 습 니 다.속성 앞의 this 를 var 로 바 꾸 었 을 뿐 입 니 다.우 리 는 var 가 변 수 를 설명 하 는 데 쓰 인 다 는 것 을 안다.show 함수 와 bill.name 은 모두 정의 되 지 않 았 습 니 다!이게 어떻게 된 거 죠?
 
앞서 말 했 던 자 바스 크 립 트 의 new 과정 을 떠 올 려 보 자.name 과 age 는 모두 var 성명 을 사용 하기 때문에 자 바스 크 립 트 는 이 를 일반적인 변수 로 간주 합 니 다.이렇게 하면 구조 초기 화가 끝 난 후에 구조 함수 가 되 돌아 갑 니 다.변 수 는 역할 영역 을 초과 하여 접근 할 수 없습니다.자 바스 크 립 트 변수 역할 영역 을 사용 하여 개인 속성 을 모 의 한 것 이다.
 
3.정적 변수
 
정적 변 수 는 클래스 에 연결 되 어 있 습 니 다.서로 다른 대상 에 게 정적 변 수 를 공유 합 니 다.
 
Person.num = 0; //     
function Person() {
    this.show = function() {
        alert("num: " + Person.num);
    };
    Person.num++;
}
var bill = new Person();
bill.show(); // 1
var tom = new Person();
tom.show(); // 2
bill.show(); // 2

 
자 바스 크 립 트 에 서 는 정적 속성 을 쉽게 추가 할 수 있 습 니 다.자 바스 크 립 트 의 대상 은 해시 이기 때문에 클래스 이름 뒤에 속성 이나 함 수 를 간단하게 추가 하면 됩 니 다.
 
4.개인 변수 와 공유 변수 에 접근
 
개인 변 수 를 방문 할 때 변수의 이름 만 사용 하면 됩 니 다.단,공유 변 수 를 방문 하려 면 this 키 워드 를 사용 해 야 합 니 다.
 
function Person(name, age) {
    this.myName = name;
    var myAge = age;
    this.show = function() {
        alert("show = name: " + this.myName + "; age: " + myAge);
    }
    var showAll = function() {
        alert("showAll = name: " + this.myName + "; age: " + myAge);
    }
}
var bill = new Person("Bill", 20);
bill.show();

 
여기 서 my Name 의 this 키 워드 를 제거 하면 속성 이 정의 되 지 않 은 오류 가 발생 합 니 다.
 
쉽게 말 하면 공유 변 수 를 설명 하기 위해 this 를 사용 해 야 합 니 다.var 를 사용 하여 개인 변 수 를 설명 합 니 다.그러나 자 바스 크 립 트 는 그렇게 간단 하지 않다.자 바스 크 립 트 는 스 크 립 트 언어 이기 때문에 우 리 는 그것 의 실행 효율 에 매우 관심 을 가 져 야 한다.자 바스 크 립 트 가 대상 을 대상 으로 디자인 한 최고의 실천 을 살 펴 보 겠 습 니 다.

좋은 웹페이지 즐겨찾기