一、介绍
- 为对象添加新的功能
- 不改变其原有的结构和功能
二、事例
给手机加一个保护壳,保护手机,但是手机原有的功能不能覆盖,要都可以使用三、UML类图
四、代码演示
```javascript class Circle { draw () {
} } class Decorator { constructor(circle) {console.log('画一个圆')
} draw () {this.circle = circle
} setRedBorder(circle) {this.circle.draw() // 调用原有的方法this.setRedBorder(circle)
} } // 测试代码 let circle = new Circle() circle.draw()console.log(`设置红色边框`)
let dec = new Decorator(circle) dec.draw()
<a name="XTxpv"></a># 五、使用场景<a name="buj8l"></a>## 1、es7的装饰器```javascript// @testDemo就是通过testDemo方法对Demo这个类进行装饰// 这样调用Demo的时候,装饰器中的方法也能使用,而且不会污染Demo类@testDemoclass Demo {//}function testDemo (target) {target.isShow = true}console.log(Demo.isShow)// 传参的装饰器function testDec(isDec) {return function (target) {target.isDec = isDec}}@testDec(false)class Demo () {}console.log(Demo.isDec)
