JS装饰器模式

JavaScript021

JS装饰器模式,第1张

装饰class

装饰方法

可以使用开源库来实现常用装饰器

三、体现设计原则

1. 将现有对象和装饰器进行分离,两者独立存在

2. 符合开放封闭原则

装饰器在angular中大量使用,有必要单独拎出来说一下。

装饰器顾名思义,就是装饰用的,装饰什么呢?

主要是类、属性和方法。

顾名思义,就是装饰类的属性的。

比如有个用户名属性username,我希望在模板打印时,前面自动加上"我的名字叫jack"。

大家想想,如果不用装饰器我们应该如何来做呢?

其实也很简单,声明一个函数,将属性传入进去处理一下就可以了对吧?

装饰器其实就是这样的函数,它会接收目标参数,然后处理完成后返回。

这里我声明了@attrDecorate()这个装饰器,这里并不需要额外传参,因此形参传空就行。

装饰器其实很简单,就是导出一个函数。

attrDecorate.js:

我们要注意一下装饰器返回的内函数,形参其实跟Object.defineProperty的形参是一致的:

第一个函数是目标对象,

第二个参数是属性信息,

第三个是属性描述符。

但属性装饰器的话,描述符是空的。

这里对del()方法进行装饰:

classDecorate.js:

之前学的组件通信,@Input()和@Output()都是属性装饰器,子组件需要对传递过来的信息进行加工处理,而@Component是类装饰器,需要对当前类进行加工,将名称、模板、样式等信息注入到类里面进去,现在看看是不是就很清楚了。

首先,引入js有两种方法。一种是绝对路径。一种是相对路径。

1、确认页面是否有报错。在浏览器中的页面上,右击“审查元素”进入调试页面,查看右上角的位置是否有报错。如果有报错,点击“X”标志,进去看什么错误,相应去解决。

2、确认JS是否被正确引入。页面没有报错,点击顶栏的Source查看相应的JS目录下是否有你引入的JS文件。如果没有则引入失败。路径有错误,重新调试吧。

3、JS被正确引入,则可能JS的方法没被正确的调用。查看对应的哪个方法没有生效,开启调试模式。