装饰器详解
装饰器详解
pubdate: 2019-06-04 09:24:26
tags : javscript,typescript
目前原生 js 中还不能使用装饰器,所以要依靠 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
}
}
};