소개
데코레이터는 상속에 대한 보다 유연한 대안을 제공합니다. 데코레이터는 동일한 인터페이스로 객체를 래핑하는 데 사용됩니다. 데코레이터를 사용하면 메서드에 동작을 추가할 수 있을 뿐만 아니라 원래 객체(예: 데코레이터의 생성자)에서 호출할 메서드를 설정할 수도 있습니다.
데코레이터는 오버로드된 메서드 형태로 새로운 기능을 추가하는 데 사용됩니다. 이 모드는 특정 목적을 달성하기 위해 데코레이터 앞이나 뒤에 자신만의 동작을 추가할 수 있습니다.
텍스트
그렇다면 데코레이터 패턴의 장점은 무엇인가요? 앞서 언급했듯이 데코레이터는 상속의 대안입니다. 스크립트가 실행될 때 하위 클래스에 동작을 추가하면 원래 클래스의 모든 인스턴스에 영향을 주지만 데코레이터는 그렇지 않습니다. 대신, 다양한 개체에 개별적으로 새로운 동작을 추가할 수 있습니다. 다음 코드에 표시된 대로:
//데코레이션이 필요한 클래스(함수)
함수 Macbook() {
This.cost = 함수 () {
1000을 반환합니다;
};
}
메모리 기능(맥북) {
This.cost = 함수 () {
macbook.cost() 75 반환;
};
}
BlurayDrive(맥북) 기능 {
This.cost = 함수 () {
macbook.cost() 300 반환;
};
}
기능보험(맥북) {
This.cost = 함수 () {
macbook.cost() 250 반환;
};
}
// 사용법
var myMacbook = new Insurance(new BlurayDrive(new Memory(new Macbook())));
console.log(myMacbook.cost());
다음은 데코레이터 객체에서 PerformTask를 호출할 때 일부 데코레이터 동작을 포함할 뿐만 아니라 기본 객체의 PerformTask 함수도 호출하는 또 다른 예입니다.
함수 ConcreteClass() {
This.performTask = 함수 () {
This.preTask();
console.log('뭔가를 하는 중');
This.postTask();
};
}
함수 AbstractDecorator(장식됨) {
This.performTask = 함수 () {
장식.performTask();
};
}
ConcreteDecoratorClass(장식된) 함수 {
This.base = AbstractDecorator;
This.base(장식);
Decorated.preTask = 함수() {
console.log('사전 호출 중..');
};
Decorated.postTask = 함수() {
console.log('post-calling..');
};
}
var Concrete = new ConcreteClass();
var decorator1 = new ConcreteDecoratorClass(콘크리트);
var decorator2 = new ConcreteDecoratorClass(장식자1);
decorator2.performTask();
또 다른 철저한 예:
var 트리 = {};
트리.장식 = 함수() {
console.log('나무가 쓰러지지 않도록 하세요');
};
tree.getDecorator = 함수(데코) {
트리[deco].prototype = this;
새 트리 반환[deco];
};
tree.RedBalls = 함수 () {
This.장식 = 함수 () {
This.RedBalls.prototype.장식(); // 7단계: 먼저 프로토타입의 장식 메소드를 실행합니다(이것은 Angel입니다)
console.log('Put on some red ball'); // 8단계 그런 다음 빨간색을 출력합니다
// RedBalls의 장식 방법으로 다음 2단계를 사용합니다
}
};
tree.BlueBalls = 함수 () {
This.장식 = 함수 () {
This.BlueBalls.prototype.장식(); // 1단계: 먼저 프로토타입의 Decorate 메서드, 즉 tree. decorate()를 실행합니다.
console.log('Add blue ball'); // 2단계 파란색을 출력합니다
// BlueBalls의 장식 방법으로 다음 2단계를 사용합니다
}
};
tree.Angel = 함수() {
This.장식 = 함수 () {
This.Angel.prototype.장식(); // 4단계: 먼저 프로토타입의 장식 메소드를 실행합니다(이것은 BlueBalls입니다)
console.log('An angel on the top'); // 5단계 그런 다음 angel을 출력합니다
// 이 2단계를 Angel의 장식 방법으로 사용하세요
}
};
tree = tree.getDecorator('BlueBalls'); // 3단계: BlueBalls 객체를 tree에 할당합니다. 이때 상위 프로토타입의 getDecorator를 계속 사용할 수 있습니다.
tree = tree.getDecorator('Angel'); // 6단계: 트리에 Angel 객체를 할당합니다. 이때 상위 프로토타입의 상위 프로토타입에 있는 getDecorator는 여전히 사용 가능합니다
tree = tree.getDecorator('RedBalls'); // 9단계: RedBalls 객체를 tree에 할당합니다
tree.장식(); // 10단계: RedBalls 개체의 장식 메서드 실행
요약
데코레이터 패턴은 기존 함수에 더 많은 기능을 동적으로 추가하는 방법입니다. 데코레이팅할 각 함수를 별도의 함수에 넣은 다음 이 함수를 사용하여 데코레이션할 기존 함수 객체를 래핑해야 합니다. 호출 코드는 필요에 따라 장식 함수를 선택적으로, 순차적으로 사용하여 개체를 래핑할 수 있습니다. 장점은 클래스(기능)의 핵심 책임과 데코레이션 기능이 분리되어 있다는 점입니다.

去掉重复并排序的方法:1、使用“Array.from(new Set(arr))”或者“[…new Set(arr)]”语句,去掉数组中的重复元素,返回去重后的新数组;2、利用sort()对去重数组进行排序,语法“去重数组.sort()”。

本篇文章给大家带来了关于JavaScript的相关知识,其中主要介绍了关于Symbol类型、隐藏属性及全局注册表的相关问题,包括了Symbol类型的描述、Symbol不会隐式转字符串等问题,下面一起来看一下,希望对大家有帮助。

怎么制作文字轮播与图片轮播?大家第一想到的是不是利用js,其实利用纯CSS也能实现文字轮播与图片轮播,下面来看看实现方法,希望对大家有所帮助!

本篇文章给大家带来了关于JavaScript的相关知识,其中主要介绍了关于对象的构造函数和new操作符,构造函数是所有对象的成员方法中,最早被调用的那个,下面一起来看一下吧,希望对大家有帮助。

本篇文章给大家带来了关于JavaScript的相关知识,其中主要介绍了关于面向对象的相关问题,包括了属性描述符、数据描述符、存取描述符等等内容,下面一起来看一下,希望对大家有帮助。

方法:1、利用“点击元素对象.unbind("click");”方法,该方法可以移除被选元素的事件处理程序;2、利用“点击元素对象.off("click");”方法,该方法可以移除通过on()方法添加的事件处理程序。

foreach不是es6的方法。foreach是es3中一个遍历数组的方法,可以调用数组的每个元素,并将元素传给回调函数进行处理,语法“array.forEach(function(当前元素,索引,数组){...})”;该方法不处理空数组。

本篇文章给大家带来了关于JavaScript的相关知识,其中主要介绍了关于BOM操作的相关问题,包括了window对象的常见事件、JavaScript执行机制等等相关内容,下面一起来看一下,希望对大家有帮助。


핫 AI 도구

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

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

Undress AI Tool
무료로 이미지를 벗다

Clothoff.io
AI 옷 제거제

AI Hentai Generator
AI Hentai를 무료로 생성하십시오.

인기 기사

뜨거운 도구

mPDF
mPDF는 UTF-8로 인코딩된 HTML에서 PDF 파일을 생성할 수 있는 PHP 라이브러리입니다. 원저자인 Ian Back은 자신의 웹 사이트에서 "즉시" PDF 파일을 출력하고 다양한 언어를 처리하기 위해 mPDF를 작성했습니다. HTML2FPDF와 같은 원본 스크립트보다 유니코드 글꼴을 사용할 때 속도가 느리고 더 큰 파일을 생성하지만 CSS 스타일 등을 지원하고 많은 개선 사항이 있습니다. RTL(아랍어, 히브리어), CJK(중국어, 일본어, 한국어)를 포함한 거의 모든 언어를 지원합니다. 중첩된 블록 수준 요소(예: P, DIV)를 지원합니다.

MinGW - Windows용 미니멀리스트 GNU
이 프로젝트는 osdn.net/projects/mingw로 마이그레이션되는 중입니다. 계속해서 그곳에서 우리를 팔로우할 수 있습니다. MinGW: GCC(GNU Compiler Collection)의 기본 Windows 포트로, 기본 Windows 애플리케이션을 구축하기 위한 무료 배포 가능 가져오기 라이브러리 및 헤더 파일로 C99 기능을 지원하는 MSVC 런타임에 대한 확장이 포함되어 있습니다. 모든 MinGW 소프트웨어는 64비트 Windows 플랫폼에서 실행될 수 있습니다.

SublimeText3 영어 버전
권장 사항: Win 버전, 코드 프롬프트 지원!

DVWA
DVWA(Damn Vulnerable Web App)는 매우 취약한 PHP/MySQL 웹 애플리케이션입니다. 주요 목표는 보안 전문가가 법적 환경에서 자신의 기술과 도구를 테스트하고, 웹 개발자가 웹 응용 프로그램 보안 프로세스를 더 잘 이해할 수 있도록 돕고, 교사/학생이 교실 환경 웹 응용 프로그램에서 가르치고 배울 수 있도록 돕는 것입니다. 보안. DVWA의 목표는 다양한 난이도의 간단하고 간단한 인터페이스를 통해 가장 일반적인 웹 취약점 중 일부를 연습하는 것입니다. 이 소프트웨어는

VSCode Windows 64비트 다운로드
Microsoft에서 출시한 강력한 무료 IDE 편집기

뜨거운 주제



