ES6 를 이용 하여 단일 모델 과 그 응용 에 대한 상세 한 설명 을 실현 합 니 다.

머리말
전통 적 인 개발 엔지니어 의 눈 에는 하나의 사례 만 있 고 실현 하 는 방법 은 보통 인 스 턴 스 의 존재 여 부 를 판단 하 는 것 이다.존재 하지 않 으 면 만 들 고 되 돌아 오 는 것 이다.그러면 하나의 인 스 턴 스 대상 만 확보 할 수 있다.JavaScript 에 서 는 하나의 네 임 스페이스 공급 자로 서 전체 네 임 스페이스 에서 유일한 접근 점 을 제공 합 니 다.
단일 모드 의 정 의 는 하나의 인 스 턴 스 만 있 고 전체 방문 점 을 제공 하 는 것 입 니 다.
단일 모드 는 적당 할 때 대상 을 만 들 고 유일한 하 나 를 만 들 수 있 습 니 다.
코드 가 생활 에 가 까 워 서 재미 있어 요.예 를 들 어 한 사이트 의 로그 인,로그 인 을 클릭 하면 로그 인 탄 상자 가 나타 나 고 다시 클릭 하 더 라 도 같은 탄 상자 가 나타 나 지 않 습 니 다.또 하나의 음악 재생 프로그램 이 있 습 니 다.만약 에 사용자 가 음악 을 열 고 음악 을 열 려 면 이전의 재생 인터페이스 가 자동 으로 닫 히 고 현재 의 재생 인터페이스 로 전환 합 니 다.이것들 은 모두 단일 모델 의 응용 장면 이다.
하나의 사례 모델 을 실현 하려 면 하나의 전형 적 인 방식 은 하나의 클래스 를 만 드 는 것 입 니 다.클래스 에서 또 하나의 방법 으로 이러한 인 스 턴 스 대상 을 만 들 수 있 고 또 하나의 태그 가 있 습 니 다.인 스 턴 스 대상 을 만 들 었 는 지 기록 하 는 것 입 니 다.대상 이 이미 존재 한다 면,첫 번 째 실례 화 대상 의 인용 을 되 돌려 줍 니 다.
단일 모드 의 실현
es5 실현 방식

var Singleton = function(name) {
 this.name = name;
 //    ,                
 this.instance = null;
}
//          ,           
Singleton.getInstance = function(name) {
 //                  
 if(!this.instance) {
  this.instance = new Singleton(name);
 }
 //       ,             
 return this.instance;
}
사용 자 는 널리 알려 진 인 터 페 이 스 를 통 해 이 인 스 턴 스 를 방문 할 수 있다.
우 리 는 이 대상 에 대해 두 번 의 실례 화 를 시도 하여 두 번 의 실례 화 결과 가 같은 대상 을 가리 키 는 지 관찰 하려 고 한다.

var a = Singleton.getInstance('sven1');
var b = Singleton.getInstance('sven2');
//             
console.log(a === b);
결 과 는 true 입 니 다.a,b 사이 가 인용 관계 임 을 설명 합 니 다.
es6 실현 방식
싱글 톤 클래스 를 만 듭 니 다.class 키워드 와 정적 함 수 는 모두 es6 에서 새로 추 가 된 것 입 니 다.

class Singleton {
 constructor(name) {
  this.name = name;
  this.instance = null;
 }
 //            ,           
 static getInstance(name) {
  if(!this.instance) {
   this.instance = new Singleton(name);
  }
  return this.instance;
 }
}
단일 모드 응용 인 스 턴 스
우 리 는 생활 속 에서 흔히 볼 수 있 는 장면 으로 단일 모델 의 응용 을 설명 한다.
임의의 사이트 에서 로그 인 단 추 를 누 르 면 있 고 하나의 로그 인 상자 만 팝 업 됩 니 다.나중에 로그 인 단 추 를 누 르 더 라 도 하나의 탄 상자 가 더 이상 팝 업 되 지 않 습 니 다.이것 이 바로 단일 모델 의 전형 적 인 응용 이다.이제 우 리 는 그것 을 실현 한다.단일 모드 의 전 시 를 중시 하기 위해 서,우 리 는 로그 인 상 자 를 간소화 합 시다.😜
페이지 에 단 추 를 설정 합 니 다.

<button id="loginBtn">  </button>
이 단추 에 클릭 이벤트 추가

const btn = document.getElementById('loginBtn');
btn.addEventListener('click', function() {
 loginLayer.getInstance();
}, false);
우 리 는 먼저 초기 화 방법 init 를 주 고 단 추 를 누 른 후에 페이지 에 테 두 리 를 추가 합 니 다.

init() {
 var div = document.createElement('div');
 div.classList.add('login-layer');
 div.innerHTML = "      ";
 document.body.appendChild(div);
}
그러면 다음 에 단일 모드 로 이 루어 져 야 합 니 다.단 추 를 누 르 면 부 창 이 하나 있 고 하나의 부 창 만 있 습 니 다.방법 은 구조 함수 에 표 시 를 만 드 는 것 입 니 다.첫 번 째 클릭 시 부 창 을 만 들 고 표 시 된 상 태 를 바 꾸 고 단 추 를 다시 누 를 때 표 시 된 상태 에 따라 부 창 을 만 들 지 여 부 를 판단 하 는 것 입 니 다.
원본 코드:

class loginLayer {
 constructor() {
  //              
  this.instance = null;
  this.init();
 }
 init() {
  var div = document.createElement('div');
  div.classList.add('login-layer');
  div.innerHTML = "      ";
  document.body.appendChild(div);
 }
 //              
 static getInstance() {
  //                  ,              
  if(!this.instance) {
   this.instance = new loginLayer();
  }
  return this.instance;
 }
}
물론 부 창 에 스타일 을 추가 하여 부 창 을 표시 하 는 것 을 잊 지 마 세 요.

.login-layer {
 width: 200px;
 height: 200px;
 background-color: rgba(0, 0, 0, .6);
 text-align: center;
 line-height: 200px;
 display: inline-block;
}
마지막 으로 이 실례 의 원본 코드 를 보 냅 니 다:

<!DOCTYPE html>
<html lang="en">
<head>
 <meta charset="UTF-8">
 <meta name="viewport" content="width=device-width, initial-scale=1.0">
 <meta http-equiv="X-UA-Compatible" content="ie=edge">
 <title>        </title>
 <style>
  .login-layer {
   width: 200px;
   height: 200px;
   background-color: rgba(0, 0, 0, .6);
   text-align: center;
   line-height: 200px;
   display: inline-block;
  }
 </style>
</head>
<body>
 <button id="loginBtn">  </button>
 <script>
  const btn = document.getElementById('loginBtn');
  btn.addEventListener('click', function() {
   loginLayer.getInstance();
  }, false);  
  class loginLayer {
   constructor() {
    this.instance = null;
    this.init();
   }
   init() {
    var div = document.createElement('div');
    div.classList.add('login-layer');
    div.innerHTML = "      ";
    document.body.appendChild(div);
   }
   static getInstance() {
    if(!this.instance) {
     this.instance = new loginLayer();
    }
    return this.instance;
   }
  }
 </script>
</body>
</html>
총결산
이상 은 이 글 의 전체 내용 입 니 다.본 논문 의 내용 이 여러분 의 학습 이나 업무 에 어느 정도 참고 학습 가치 가 있 기 를 바 랍 니 다.궁금 한 점 이 있 으 시 면 댓 글 을 남 겨 주 셔 서 저희 에 대한 지지 에 감 사 드 립 니 다.

좋은 웹페이지 즐겨찾기