js 디자인 모델 제3 장

2425 단어
패키지 + 정보 숨 기기
why?
원본 데이터 와 결합 하 라 고 합 니 다.
what?
대상 을 정의 하 는 세 가지 방법
1. 외부 에 완전히 노출 되 는 방법 (전통 적 인 것 을 이용 하여 함수 로 구조 함 수 를 모 의 합 니 다. 모든 속성 과 방법 이 공 개 된 Public 이기 때 문 입 니 다)
   var Book = function(isbn,title,author){
       this.isbn = isbn;
       this.title = title;
       this.author = author;
  }
  Book.prototype.display = function(){this.checkIsbn();....}
  Book.prototype.checkIsbn = function(){}
모든 방법 이 외부 에 노출 되 어 있 습 니 다. checkIsbn 이 외부 에 노출 되 지 않 아 도 모든 속성 이 외부 에 노출 됩 니 다. isbn 속성 은 대상 이 생 성 된 후에 수정 할 수 없습니다. 그러나 이러한 방법 으로 대상 을 통 해 isbn 의 속성 을 수정 할 수 있 습 니 다.
var jsbook = new Book('9999','js','MCZ');
jsbook.isbn='8888';
2. 명명 습관 을 이용 하여 개인 변수 와 함 수 를 설명 합 니 다. 즉, '' 로 시작 하면 개인 적 인 것 을 표시 하고 대상 을 통 해 직접 방문 해 서 는 안 됩 니 다.
그러나 문제 도 분명 하 다. 이런 방법 은 강제 집행 할 수 없다.
3. 폐쇄 를 이용 하여 실현 한다.
var Book = function(isbn,title,author){
    var is,ti,au;
   //privileged methods
    this.setIsbn = function(isbn){is=isbn;}
    this.setTitle = function(title){ti=title;}
    this.setAuthor = function(author){au=author;}
    this.setIsbn(isbn);
    this.setTitle(title);
    this.setAuthor(author);
}
Book.prototype.display = function(){}  //public ,non-privileged methods
장점 은 정보 숨 김 을 실현 하 는 것 입 니 다. 단점 은 대상 마다 private 와 privileged method 가 있 습 니 다. 메모 리 를 많이 소모 할 수 있 습 니 다. 또한 이 모델 은 계승 에 사용 하기 가 매우 어렵 습 니 다. 하위 클래스 는 부모 클래스 의 개인 속성 과 방법 에 접근 할 수 없 기 때 문 입 니 다.
정적 속성 과 방법
정적 속성 과 방법 은 클래스 자체 와 상호작용 을 하 는 것 으로 대상 과 무관 합 니 다. 정적 구성원 은 메모리 에 하나만 저장 합 니 다.
var Book = (function(){
    //private static attributes
    var numOfBooks = 0;
    //private static method
    function checkIsbn(isbn){}
    //return the constructor
    return function(newIsbn,newTitle,newAuthor){
      //private attribute
      var isbn,title,author;
      ...............
      numOfBooks++;
    }
})();
//public static method
Book.convertToTitleCase = function(inputString){}

클래스 의 개인, 특권 구성원 정 의 는 구조 함수 에 있 으 며, 각각 var 와 this 를 사용 합 니 다. 클래스 의 정적 구성원 정 의 는 패키지 에 있 습 니 다.
상수
상수 는 값 이 변 하지 않 는 변수 로 js 에서 폐쇄 를 통 해 이 루어 집 니 다.
var Constants = (function(){
    var a = 100;
    var getA=function(){return a;};
    return {getA:getA};
})();
alert(Constants.getA());

좋은 웹페이지 즐겨찾기