JavaScript의 EventBus는 객체 간 통신을 수행합니다.
2805 단어 JavaScriptEventBus대상 통신
저는 개인적으로 이해합니다. EventBus는 대상 간의 통신을 실현할 수 있고 데이터나 특정한 특성이 바뀔 때 자동으로 이벤트를 감청하여 변경할 수 있습니다.아직 더 많은 내용이 있습니다.어떻게 통신을 실현합니까?여기에는 하나의 예를 통해 그 중의 정수를 이해할 수 있다.
간단한 예
add(){
data+=1;
render(data);
},
minus(){
data-=1;
render(data);
},
multiply(){
data*=2;
render(data);
},
divide(){
data/=2;
render(data);
},
상기 코드는 가감승제의 연산으로 데이터 데이터가 변경된 후 데이터 데이터를 렌더링하여 렌더링 함수render () 로 호출합니다.이렇게 번거롭다고 생각하십니까? 코드 중복이 매우 많지만 표현하고자 하는 뜻은 다음과 같습니다. 데이터는 업데이트만 하면 렌더링 함수render () 를 호출합니다.
질문이 왔습니다. 간소화할 방법이 있습니까?데이터가 바뀌면render () 함수를 자동으로 호출합니다
3. 코드 프레젠테이션 실례
const eventbus=$({}); // jQuery eventbus。
let xx = {
data:{
n:100,
}
}
updata(data){
Object.assign(xx.data,data); //
eventbus.trigger('updataed:xx.data'); // , :'updataed:xx.data'
}
/* jquer */
eventbus.on('updataed:xx.data',()=>{
render(xx.data);
})
/* */
add(){
updata({n:xx.data.n+1});
},
minus(){
updata({n:xx.data.n-1});
},
multiply(){
updata({n:xx.data.n*2});
},
divide(){
updata({n:xx.data.n/2});
}
updata () 함수를 호출하면 이벤트 버스가 됩니다.trigger ('updataed: xx.data') 가 터치하고 이벤트 감청이 터치하며 렌더링 () 함수를 자동으로 호출합니다넷째, class 패키지로 + EventBus 상속
class EventBus{
constructor(){
this.eventbus=$(window); // jquery eventbus window
}
on(eventName,fn){
this.eventbus.on(eventName,fn);
}
trigger(eventName){
this.eventbus.trigger(eventName);
}
off(eventName,fn){
this.eventbus.off(eventName,fn);
}
}
const eventbus=new EventBus();
eventbus.trigger('updated:xx.data')
eventbus.on('updated:xx.data',()=>{
render(xx.data);
})
eventbus.off('updated:xx.data')
/* EventBus */
class module extends EventBus{
constructor(){
super(); // constructor
}
}
module.trigger('updated:xx.data')
module.on('updated:xx.data',()=>{
render(xx.data);
})
module.off('updated:xx.data')
클래스 패키지와 EventBus를 계승하는 이유는 무엇입니까?답: 코드를 더욱 포맷하기 위해 여기에서 EventBus뿐만 아니라 다른 곳에서도 사용할 수 있습니다.특히 모듈화된 작업에서 봉인+계승은 매우 중요하다.이렇게 하면 코드를 더욱 잘 유지할 수 있다.다른 모듈이 이벤트버스에 사용될 때 더 많은 변형이 있을 수 있습니다. 부류를 다시 쓰거나 방법을 추가할 수 있습니다.
JavaScript에서 EventBus가 대상 간의 통신을 실현하는 것에 관한 이 글은 여기에 소개되었습니다. 더 많은 JavaScript EventBus 대상 통신 내용은 저희 이전의 글을 검색하거나 아래의 관련 글을 계속 훑어보십시오. 앞으로 많은 응원 부탁드립니다!
이 내용에 흥미가 있습니까?
현재 기사가 여러분의 문제를 해결하지 못하는 경우 AI 엔진은 머신러닝 분석(스마트 모델이 방금 만들어져 부정확한 경우가 있을 수 있음)을 통해 가장 유사한 기사를 추천합니다:
기초 정리 - 1문자 (String) 숫자 (Number) 불린 (Boolean) null undefined 심볼 (Symbol) 큰정수 (BigInt) 따옴표로 묶어 있어야 함 Not-A-Number - 숫자 데이터 / 숫자로 표...
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
CC BY-SA 2.5, CC BY-SA 3.0 및 CC BY-SA 4.0에 따라 라이센스가 부여됩니다.