js 간단하고 거친 구독 예시 코드 발표

2348 단어 js구독발표하다
게시/구독이란 무엇입니까?
예를 들어 당신은 어떤 가게에 가서 옷을 사요. 당신과 가게 점장은 서로 몰라요. 가게 점장은 그의 옷만 팔아요. 누가 사는지에 관심이 없어요. 그리고 당신도 당신이 원하는 옷만 사고 어느 가게가 파는지 관심이 없어요. 이때 가게와 당신은 게시/구독 관계를 형성합니다.
가게에 옷 스타일이 나오면 원하는 옷을 찾아라. 찾으면 사고, 찾지 못하면 이 가게를 떠나라.전체 과정이 이렇게 간단하다.
장면 사용
비동기 통신, 다중 페이지 간 상호 통신, 페이지 A의 방법은 페이지 B의 방법이 호출하는 어떤 시기에 촉발하려고 한다
직접 코드

class Publish {
 constructor() {
  this.listMap = {};
 }
	//  
 on(key, fn) {
  this.listMap[key]
   ? this.listMap[key].push(fn)
   : this.listMap[key] = [fn];
   
		//  fn 
  const index = this.listMap[key].length - 1;
  
		//  function
  return () => this.clear(key, index);
 }
 
	//  key 
 off(key) {
  delete this.listMap[key];
 }
 
	//  key 
 clear(key, index) {
  index === this.listMap[key].length - 1
   ? this.listMap[key].pop()
   : this.listMap[key][index] = null;
 }
 
	// 
 once(key, fn) {
  this.on(key, (...rest) => {
   fn(...rest);
   this.off(key);
  });
 }

	//  key
 trigger(key, ...rest) {
 	if(key in this.listMap) {
	 	this.listMap[key].forEach(fn => {
	   fn(...rest);
	  });
 	}
 }
}
사용 방법

const ob = new Publish();

//   sub1
const sub1 = ob.on('sub1', (a, b) => {
 console.log('sub1', a, b);
});

//   sub1
const sub11 = ob.on('sub1', (a, b) => {
 console.log('sub11', a, b);
});

ob.trigger('sub1', 2, 3);

//  sub1
sub1();

//  sub11
sub11();

//   sub3
ob.on('sub3', (a, b) => {
 console.log('sub3', a, b);
});

//   sub3
ob.on('sub3', (a, b) => {
 console.log('sub33', a, b);
});

ob.trigger('sub3', 6, 7);

//  sub3
ob.off('sub3');

//  
ob.once('sub4', (a, b) => {
 console.log('sub4', a, b);
});

ob.trigger('sub4', 8, 9);
총결산
이 js의 간단하고 난폭한 구독 게시에 관한 글을 소개합니다. 더 많은 관련 js의 구독 내용을 간단하게 게시하려면 저희 이전의 글을 검색하거나 아래의 관련 글을 계속 훑어보십시오. 앞으로 많은 응원 부탁드립니다!

좋은 웹페이지 즐겨찾기