装饰器详解

装饰器详解

pubdate: 2019-06-04 09:24:26
tags : javscript,typescript
目前原生 js 中还不能使用装饰器,所以要依靠 typescript 来实现
typescript 装饰器文档

装饰器可以用到哪里

装饰器是一种特殊类型的声明,它能够被附加到类声明,方法, 访问符,属性或参数上。 装饰器使用 @expression 这种形式,expression 求值后必须为一个函数,它会在运行时被调用,被装饰的声明信息做为参数传入。

装饰器应用顺序

1.参数装饰器,然后依次是方法装饰器,访问符装饰器,或属性装饰器应用到每个实例成员。​2.参数装饰器,然后依次是方法装饰器,访问符装饰器,或属性装饰器应用到每个静态成员。​3.参数装饰器应用到构造函数。​4.类装饰器应用到类。

方法装饰器

在类的方法上应用装饰器 装饰器函数可以接收到三个参数 这个函数返回的对象会作为属性描述符
typescript
function (target: any, propertyKey: string, descriptor: PropertyDescriptor) { descriptor.enumerable = value; };
targe 是类,propertyKey 就是方法的名字,descriptor 是属性描述符,主要就是通过修改属性描述符来实现自己想要装饰的功能

应用方法原有逻辑然后修改返回结果,对传入的参数进行处理

typescript
function (target: any, propertyKey: string, descriptor: PropertyDescriptor) { return { ...descriptor, /** 重写方法 */ async value(...arg){ //arg就是传入的参数列表,可以直接在这里进行修改 //....修改arg /** 应用原有逻辑得到原始返回结果 */ const res=await descriptor.value.apply(target,arg) //在这里就可以对返回结果进行封装 //.....对结果的处理操作 return res } } };