웹 프론트엔드 JS 튜토리얼 프레임워크의 JavaScript 디자인 패턴 및 사례 소개

프레임워크의 JavaScript 디자인 패턴 및 사례 소개

Feb 07, 2017 pm 02:09 PM
javascript 액자 디자인 패턴

JS 및 어셈블리 코드를 작성하는 과정에서 특정 디자인 패턴을 사용하면 코드를 더욱 우아하고 유연하게 만들 수 있습니다.

다음으로 저자는 구독과 redux, 클래스(ES6의 클래스), vue의 $dispatch, jquery의 on/off를 결합하여 이러한 라이브러리, 문법 및 프레임워크에서 디자인 패턴을 사용하는 방법에 대해 간략하게 소개합니다. .

디자인 패턴으로 해결되는 문제

디자인 패턴은 그다지 신비한 지식이 아닙니다. 많은 학생들이 JS 코드를 작성할 때 무심코 많은 디자인 패턴을 사용합니다.

저자는 디자인 패턴을 추상화하여 별도로 논의하는 것은 일반적으로 사용되는 JS 패턴을 설명하기 위해 거품을 추상화하고 알고리즘에서 정렬하는 것과 같다고 믿습니다.

이러한 유형의 패턴을 연구하여 패턴이 코드 구조와 JS 알고리즘을 안내하도록 하세요.

일반적으로 사용되는 일부 디자인 패턴 개요

관찰자 [관찰자 모드]

상태 변화에 따라 관찰자 큐 및 hashMap의 콜백 동작을 적극적으로 트리거

간단한 관찰자 패턴 코드 연습

class StateTracker{
    constructor(){
         this.observers = [];
         this.internamState= 10;
     }
     // 改变内部状态,触发状态的观察者列表
     change(val){
         this.internamState= val;
         this.observers.forEach(observer=>observer(val));
     }
     registerObserver(ObserverFn){
       this.obserers.push(ObserverFn)
    }
 }
로그인 후 복사

 publish/subscribe [구독 게시 모드]

  hashMap의 주제/콜백 형식을 코드 모듈의 공유 액세스 공간에 저장합니다.

켜기/끄기/트리거 및 기타 인터페이스를 추가하여 장착, 제거, 트리거링과 같은 작업을 구현합니다.

간단한 구독-출판 모델 코드 연습

class PubSubHandler{
   constructor(){
      this.eventPool = {};
    }
    //移除
    off(topicName){
       delete this.observers[topicName]
    }
     //发布
     trigger(topicName,...args){
        this.eventPool[topicName] && 
        this.eventPool[topicName].forEach(callback=>callback(...args));
     }
     //订阅
     on(topicName,callback){
        let topic = this.eventPool[topicName] ;
        if(!topic){
            this.eventPool[topicName] =[]
        }
      this.eventPool[topicName].push(callback)
   }
}
로그인 후 복사

싱글톤 [단일 케이스 모드]

생성자의 인스턴스는 하나만 있으며, 일반적으로 내부 인스턴스는 내부 인스턴스에 대한 인터페이스 액세스를 통해 클로저.

var singleton = ()=>{
    var instance;
    var createInstance = ()=>{
        this.a = 1;
        this.b = 2;
    }
    return {
         getInstance:()=>{
            if(!instance){
               instance = createInstance();
           }
            return instance;
         }
     }
}
var test = singleton();
test.getInstance() == test.getInstance() //true
로그인 후 복사

  데코레이터 하이브리드 모드

이 모드는 원본 객체에 더 많은 동작을 장식하고 변수 이름을 변경하지 않고 유지하는 모드입니다. ES7의 @designator나 python 및 기타 언어를 사용해 본 적이 있다면 decorator에 익숙할 것입니다.

function decorator(sourceObj,decortorFn){
    decortorFn(sourceObj);
    return sourceObj
}
 var d = {a:1};
 // d变为了{a:1,b:1}
 d = decorator(d,(d)=>{d.b=1});
로그인 후 복사

 mixin 블렌딩 모드

이 모드는 기능이 더 수직적이라는 점을 제외하면 데코레이터와 다소 유사합니다. 원본 개체 위에 개체를 추가하고 덮어쓰는 행위입니다. Extensions 및 Object.Assign과 같은 메서드와 비교할 때 mixin 모드는 더 표현력이 뛰어납니다. 믹스인 패턴은 일반화할 수 없습니다. vue.mixin

class StateTracker{
   constructor(){
       this.raw = {
           a:1,
            b:2
         }
     }
   mixin(obj){
        Object.assign(this.raw,obj)
   }
}
로그인 후 복사

와 같이 다양한 데이터 유형에 따라 다양한 믹스인 전략이 있을 수 있습니다. 사용된 프레임워크, 문법, 라이브러리 등. 이러한 디자인 패턴의 적용을 설명합니다.

Redux의 관찰자 모드 사용

var store = createStore(reducer,initialState);//注册redux store,存储在 nextListeners数组
var test = store.subscribe(()=>{console.log('我注册了!')});// 取消注册监听 test.unsubscribe();
 publish/subscribe在jquery中的使用
$(document).on('hello',()=>{console.log('hello')})$(document).trigger('hello');$(document).off('hello')
로그인 후 복사

React-redux의 데코레이터 모드의 실습

//装饰器
@connect(state=>state)
class Container extends Component{
  render(){
     return JSON.stringify(this.props)   
   }
}
로그인 후 복사


본 웹사이트의 성명
본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.

핫 AI 도구

Undresser.AI Undress

Undresser.AI Undress

사실적인 누드 사진을 만들기 위한 AI 기반 앱

AI Clothes Remover

AI Clothes Remover

사진에서 옷을 제거하는 온라인 AI 도구입니다.

Undress AI Tool

Undress AI Tool

무료로 이미지를 벗다

Clothoff.io

Clothoff.io

AI 옷 제거제

Video Face Swap

Video Face Swap

완전히 무료인 AI 얼굴 교환 도구를 사용하여 모든 비디오의 얼굴을 쉽게 바꾸세요!

뜨거운 도구

메모장++7.3.1

메모장++7.3.1

사용하기 쉬운 무료 코드 편집기

SublimeText3 중국어 버전

SublimeText3 중국어 버전

중국어 버전, 사용하기 매우 쉽습니다.

스튜디오 13.0.1 보내기

스튜디오 13.0.1 보내기

강력한 PHP 통합 개발 환경

드림위버 CS6

드림위버 CS6

시각적 웹 개발 도구

SublimeText3 Mac 버전

SublimeText3 Mac 버전

신 수준의 코드 편집 소프트웨어(SublimeText3)

Java 프레임워크에 대한 상용 지원의 비용 효율성을 평가하는 방법 Java 프레임워크에 대한 상용 지원의 비용 효율성을 평가하는 방법 Jun 05, 2024 pm 05:25 PM

Java 프레임워크에 대한 상용 지원의 비용/성능 평가에는 다음 단계가 포함됩니다. 필요한 보증 수준과 SLA(서비스 수준 계약) 보장을 결정합니다. 연구지원팀의 경험과 전문성. 업그레이드, 문제 해결, 성능 최적화와 같은 추가 서비스를 고려하십시오. 위험 완화 및 효율성 향상을 기준으로 비즈니스 지원 비용을 평가합니다.

PHP 프레임워크의 학습 곡선은 다른 언어 프레임워크와 어떻게 비교됩니까? PHP 프레임워크의 학습 곡선은 다른 언어 프레임워크와 어떻게 비교됩니까? Jun 06, 2024 pm 12:41 PM

PHP 프레임워크의 학습 곡선은 언어 숙련도, 프레임워크 복잡성, 문서 품질 및 커뮤니티 지원에 따라 달라집니다. PHP 프레임워크의 학습 곡선은 Python 프레임워크에 비해 높고 Ruby 프레임워크에 비해 낮습니다. Java 프레임워크에 비해 PHP 프레임워크는 학습 곡선이 적당하지만 시작하는 데 걸리는 시간이 더 짧습니다.

PHP 프레임워크의 경량 옵션은 애플리케이션 성능에 어떤 영향을 줍니까? PHP 프레임워크의 경량 옵션은 애플리케이션 성능에 어떤 영향을 줍니까? Jun 06, 2024 am 10:53 AM

경량 PHP 프레임워크는 작은 크기와 낮은 리소스 소비를 통해 애플리케이션 성능을 향상시킵니다. 그 특징은 다음과 같습니다: 작은 크기, 빠른 시작, 낮은 메모리 사용량, 향상된 응답 속도 및 처리량, 리소스 소비 감소 실제 사례: SlimFramework는 500KB에 불과한 REST API를 생성하며 높은 응답성과 높은 처리량을 제공합니다.

다양한 애플리케이션 시나리오에 가장 적합한 golang 프레임워크를 선택하는 방법 다양한 애플리케이션 시나리오에 가장 적합한 golang 프레임워크를 선택하는 방법 Jun 05, 2024 pm 04:05 PM

애플리케이션 시나리오를 기반으로 최고의 Go 프레임워크를 선택하세요. 애플리케이션 유형, 언어 기능, 성능 요구 사항 및 생태계를 고려하세요. Common Go 프레임워크: Gin(웹 애플리케이션), Echo(웹 서비스), Fiber(높은 처리량), gorm(ORM), fasthttp(속도). 실제 사례: REST API(Fiber) 구축 및 데이터베이스(gorm)와 상호 작용. 프레임워크를 선택하세요. 주요 성능을 ​​위해서는 fasthttp를 선택하고, 유연한 웹 애플리케이션을 위해서는 Gin/Echo를, 데이터베이스 상호작용을 위해서는 gorm을 선택하세요.

Java 프레임워크 학습 로드맵: 다양한 분야의 모범 사례 Java 프레임워크 학습 로드맵: 다양한 분야의 모범 사례 Jun 05, 2024 pm 08:53 PM

다양한 분야에 대한 Java 프레임워크 학습 로드맵: 웹 개발: SpringBoot 및 PlayFramework. 지속성 계층: Hibernate 및 JPA. 서버 측 반응형 프로그래밍: ReactorCore 및 SpringWebFlux. 실시간 컴퓨팅: ApacheStorm 및 ApacheSpark. 클라우드 컴퓨팅: Java용 AWS SDK 및 Google Cloud Java.

Golang 프레임워크 학습 과정에서 흔히 저지르는 오해는 무엇입니까? Golang 프레임워크 학습 과정에서 흔히 저지르는 오해는 무엇입니까? Jun 05, 2024 pm 09:59 PM

Go 프레임워크 학습에는 다섯 가지 오해가 있습니다. 프레임워크에 대한 과도한 의존과 제한된 유연성입니다. 프레임워크 규칙을 따르지 않으면 코드를 유지 관리하기가 어려워집니다. 오래된 라이브러리를 사용하면 보안 및 호환성 문제가 발생할 수 있습니다. 패키지를 과도하게 사용하면 코드 구조가 난독화됩니다. 오류 처리를 무시하면 예기치 않은 동작과 충돌이 발생합니다.

golang 프레임워크 개발에 대한 자세한 실제 설명: 질문과 답변 golang 프레임워크 개발에 대한 자세한 실제 설명: 질문과 답변 Jun 06, 2024 am 10:57 AM

Go 프레임워크 개발에서 일반적인 과제와 해결 방법은 다음과 같습니다. 오류 처리: 관리에는 오류 패키지를 사용하고 중앙에서 오류를 처리하려면 미들웨어를 사용합니다. 인증 및 권한 부여: 타사 라이브러리를 통합하고 사용자 정의 미들웨어를 생성하여 자격 증명을 확인합니다. 동시 처리: 고루틴, 뮤텍스 및 채널을 사용하여 리소스 액세스를 제어합니다. 단위 테스트: 격리를 위해 getest 패키지, 모의 및 스텁을 사용하고, 충분성을 보장하기 위한 코드 적용 도구를 사용합니다. 배포 및 모니터링: Docker 컨테이너를 사용하여 배포를 패키징하고, 데이터 백업을 설정하고, 로깅 및 모니터링 도구를 사용하여 성능과 오류를 추적합니다.

이전 버전에서 최신 버전으로 PHP를 업그레이드하면 프레임워크에 미치는 영향 이전 버전에서 최신 버전으로 PHP를 업그레이드하면 프레임워크에 미치는 영향 Jun 04, 2024 pm 06:37 PM

이전 PHP 버전에서 최신 버전으로 업그레이드하면 호환되지 않는 구문 및 함수, 더 이상 사용되지 않거나 제거된 기능, 성능 변경 등 프레임워크에 영향을 미칠 수 있습니다. 버전 호환성을 확인하고, 애플리케이션을 테스트하고, 종속성을 업데이트하고, 점진적으로 업그레이드하거나 영향을 최소화하기 위한 지원을 찾아야 합니다.

See all articles